a = [1,2,23,4,5,6,7,40,9,10,100,12,13,14,15,700,17,18,19,20]
for i in range(0, len(a), 5):
print(sum(a[i:i+5]))
a = [1,2,23,4,5,6,7,40,9,10,100,12,13,14,15,700,17,18,19,20]
i = 5
while i < len(a):
a.insert(i, 33333335)
i += 6
print (a)
def generate(sequence, group_by=5, func=sum):
for group in zip(*[iter(sequence)]*group_by):
yield from group
yield func(group)
print(*generate(a))
*[iter(sequence)]*group_by
[iter(sequence)]*group_by --> [iter(sequence), iter(sequence), iter(sequence)]
zip(* [iter(sequence), iter(sequence), iter(sequence)]) --> zip(iter(sequence), iter(sequence), iter(sequence))
за счет этого результат не дублируется, а продолжается,
[iter(sequence), iter(sequence), iter(sequence)]
или
zip(iter(sequence), iter(sequence), iter(sequence))
Потому что в записи
[iter(sequence), iter(sequence), iter(sequence)]
или
zip(iter(sequence), iter(sequence), iter(sequence))
3 разных независимых итератора, а не ссылка на один и тот же
In [5]: sequence = [1,2,3]
In [6]: [iter(sequence)] * 3
Out[6]:
[<list_iterator at 0x2b63abce880>,
<list_iterator at 0x2b63abce880>,
<list_iterator at 0x2b63abce880>]
[iter(sequence)]*group_by == [iter(sequence), iter(sequence), iter(sequence)]
[iter(sequence)]*group_by - копии одного и того же объекта-итератора
[iter(sequence), iter(sequence), iter(sequence)] - список разных итераторов
Шаманство, как в group попадает этот готовый кортеж?