Skip to main content
 首页 » 编程设计

python之迭代每个 N 元素,放入一个元素(元组),然后每个 N 元素,放入另一个元素(元组)

2025年05月04日11cloudgamer

如何遍历列表的每 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]] 
>>>