如何遍历列表的每5个元素并包含一个元组,然后将同一个列表的第6个元素作为第二个元组 - 然后在接下来的5个元素和第6个元素上执行相同的操作。
我读过
operator.itemgetter(*项目)
我也读过
阵列
我在考虑类似的事情:
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],...
答案 0 :(得分:4)
你可以写一个发电机。请注意,这并不能处理任何边缘情况并假设您的数据表现良好:
>>> 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]]
>>>
答案 1 :(得分:3)
实现此目的的一种方法是使用itertools.chain
和列表理解表达式:
>>> from itertools import chain
>>> l = [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
>>> list(chain(*[[[j[0] for j in l[i:i+5]], l[i+5]] for i in range(0, len(l), 6)]))
[[1, 2, 3, 4, 5], [6], [7, 8, 9, 10, 11], [12]]
修改:根据用户的评论。预期的行为是将项目包装在列表中而不是加入项目。在这种情况下,它可以完成:
>>> l = ('qw','er','ty','ui','op','as','df','gh','jk','l','zx','cv')
>>> list(chain(*[(list(chain(l[i:i+5])), [l[i+5]]) for i in range(0, len(l), 6)]))
[['qw', 'er', 'ty', 'ui', 'op'], ['as'], ['df', 'gh', 'jk', 'l', 'zx'], ['cv']]
在这种情况下,相关提及的list
将返回:
[[[1], [2], [3], [4], [5]], [[6]], [[7], [8], [9], [10], [11]], [[12]]]
答案 2 :(得分:1)
对:您可能不希望通过一次操作来完成此操作。相反,使用一对相关的操作。请注意,您的语法不会产生列表:您在每个列表赋值语句中都没有离开最外面的括号对。
我会把它留在循环中,以确保你理解逻辑。您也可以将整个过程放在一个列表中,只需一行,但我猜你发现它很难阅读。
ord_list = [[i] for i in range(24)]
print ord_list
new_l = []
for n in range(0, len(ord_list)-5, 6):
new_l += [[ord_list[n+i][0] for i in range(5)]] + [ord_list[n+5]]
print new_l
输出:
[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23]]
[[0, 1, 2, 3, 4], [5], [6, 7, 8, 9, 10], [11], [12, 13, 14, 15, 16], [17], [18, 19, 20, 21, 22], [23]]
这就是你需要的吗?