Python 如何访问';窗口';每次迭代中列表中元素的数量?
假设我有一个列表[a,b,c,d,e],我想创建一个元组列表[(a,b,c,c),(b,c,d),(c,d,e)]。是否可以不使用数组索引作为循环变量?这样做的最佳方式是什么Python 如何访问';窗口';每次迭代中列表中元素的数量?,python,list,Python,List,假设我有一个列表[a,b,c,d,e],我想创建一个元组列表[(a,b,c,c),(b,c,d),(c,d,e)]。是否可以不使用数组索引作为循环变量?这样做的最佳方式是什么 zip(li, li[1:],li[2:]) 这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题 这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题。不确定这是否满足您的约束,但它应该这样做 the_list = [1,2,3,4,5
zip(li, li[1:],li[2:])
这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题
这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题。不确定这是否满足您的约束,但它应该这样做
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))]
不确定这是否满足您的约束,但它应该满足
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))]
当我想这样做的时候,我会保留这个方便的函数
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)
当我想这样做的时候,我会保留这个方便的函数
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)
这会一次又一次地复制列表,对于迭代器/生成器而不是列表不起作用。它还可以在Python2上立即创建所有窗口,占用窗口的宽度*列表内存的长度。它还将立即在Python 2上创建所有窗口,占用窗口的宽度*列表内存的长度。如果不使用数组索引作为循环变量,这是个问题。如果不使用数组索引作为循环变量,这是个问题。