Умножить сразу несколько объектов из итерируемого объекта?
Как я могу предоставить несколько элементов за раз из итерируемого объекта?
Например, с последовательностью произвольной длины, как я могу перебирать элементы в последовательности в группах из X последовательных элементов на итерацию?
Ответы
Ответ 1
Ваш вопрос немного расплывчатый, но ознакомьтесь с рецептом grouper
в документации itertools
.
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
(Замена одного и того же итератора несколько раз с помощью [iter(iterable)]*n
- это старый трюк, но инкапсуляция в эту функцию позволяет избежать запутанного кода, и это точная форма и интерфейс, которые многие люди будут использовать. немного стыдно, что он фактически не находится в модуле itertools
.)
Ответ 2
Вот еще один подход, который работает на более старой версии Python, у которой нет izip_longest:
def grouper(n, seq):
result = []
for x in seq:
result.append(x)
if len(result) >= n:
yield tuple(result)
del result[:]
if result:
yield tuple(result)
Нет наполнителя, поэтому в последней группе может быть меньше n элементов.
Ответ 3
Просто используйте itertools.groupby