如何遍历列表的每 5 个元素并将它们组成一个元组,然后将同一列表的第 6 个元素作为第二个元组 - 然后对接下来的 5 个元素和第 6 个元素执行相同的操作。
我读过
operator.itemgetter(*items)
我也读过
arrays
我在想类似的东西:
first_N_element=[generator.next() for i in range(N)]
但这不能只取下一个元素并重复完全相同的操作。
例如,如果您有:
l = [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],...
我们如何组成这样的新列表:
new_l = [1,2,3,4,5],[6],[7,8,9,10,11],[12],...
请您参考如下方法:
你可以写一个生成器。请注意,这不会处理任何边缘情况,并假设您的数据表现良好:
>>> def my_gen(sequence):
... it = iter(sequence)
... while True:
... yield [next(it) for _ in range(6)]
... yield [next(it)]
...
>>> l = range(1, 7*4 +1)
>>> list(my_gen(l))
[[1, 2, 3, 4, 5, 6], [7], [8, 9, 10, 11, 12, 13], [14], [15, 16, 17, 18, 19, 20], [21], [22, 23, 24, 25, 26, 27], [28]]
>>>
您可以对此进行改进以满足您的需求。例如,使用 from itertools import slice 可以处理“不均匀”列表 - 不是 7 的倍数的列表,返回尾随位,如下所示:
>>> def my_gen(sequence):
... it = iter(sequence)
... while True:
... six = list(islice(it, 6))
... if six:
... yield six
... yield [next(it)]
...
>>> l = range(1, 7*4 -3)
>>> list(my_gen(l))
[[1, 2, 3, 4, 5, 6], [7], [8, 9, 10, 11, 12, 13], [14], [15, 16, 17, 18, 19, 20], [21], [22, 23, 24]]
>>>
