假设我有一个列表[a,b,c,d,e],我想创建一个元组列表[(a,b,c),(b,c,d),(c,d, E)]。是不是可以不使用数组索引作为我的循环变量?这样做的最佳方式是什么?
答案 0 :(得分:1)
zip(li, li[1:],li[2:])
这将元素拉到一起。每次迭代对应li [i],li [i + 1],li [i + 2],因此解决了原始问题。
答案 1 :(得分:0)
不确定这是否满足您的约束,但它应该这样做。
the_list = [1,2,3,4,5,6,7]
tuple_size = 3
tuple_list = [tuple(the_list[i-tuple_size:i]) for i in range(tuple_size, len(the_list))]
答案 2 :(得分:0)
当我想要这样做时,我保留了这个方便的功能。
import itertools
def nwise(it, n, wrapping=False):
# nwise('ABCD', 2) --> AB BC CD
# nwise('ABCDEF', 3) --> ABC BCD CDE DEF
# nwise('ABCD', 2, wrapping=True) --> AB BC CD DA
# nwise('ABCD', 3, wrapping=True) --> ABC BCD CDA DAB
copies = itertools.tee(it, n)
columns = []
for index, copy in enumerate(copies):
front = list(itertools.islice(copy, 0, index))
if wrapping:
columns.append(itertools.chain(copy, front))
else:
columns.append(copy)
return itertools.izip(*columns)