#python #list #split #chunks
#python #Список #разделить #куски
Вопрос:
У меня есть список слов и список целых чисел ‘n’. Как мне разделить список слов на куски размером ‘n’ (неравномерные)?
например
words = ['apple', 'orange', 'oof', 'banana', 'apple', 'cherries', 'tomato']
n = ['2', '1', '4']
вывод:
[['apple', 'orange'], ['oof'], ['banana', 'apple', 'cherries', 'tomato']]
Ответ №1:
Другой ответ:
output = []
count = 0
for i in range(len(n)):
chunk_size = int(n[i])
chunk = []
for j in range(chunk_size):
index = (i * j) j
chunk.append(words[count])
count = count 1
output.append(chunk)
print(output)
Ответ №2:
Вы можете использовать понимание списка с помощью iter
и next
:
words = ['apple', 'orange', 'oof', 'banana', 'apple', 'cherries', 'tomato']
n = ['2', '1', '4']
new_words = iter(words)
result = [[next(new_words) for _ in range(int(i))] for i in n]
Вывод:
[['apple', 'orange'], ['oof'], ['banana', 'apple', 'cherries', 'tomato']]
Ответ №3:
Простая O(n)
стратегия:
words = ['apple', 'orange', 'oof', 'banana', 'apple', 'cherries', 'tomato']
n = ['2', '1', '4']
start = 0
out = []
for num in n:
num = int(num)
out.append(words[start:start num])
start = num
Ответ №4:
Если вы открыты для импорта numpy или itertools, вы можете создать новый список с накопительной суммой и использовать его в качестве индекса для создания желаемого результата:
# itertools.accumulate
from itertools import accumulate
m = [0] list(accumulate([0] n))
# numpy.cumsum
import numpy as np
m = np.cumsum([0] n)
# Create new list
[words[i:j] for i, j in zip(m[:-1], m[1:])]