我想通过一个列表循环检查每个项目对它后面的一个。
是否有一种方法可以在y中循环使用x的最后一项?如果可以的话,我宁愿不使用索引。
Note
freespace回答了我的实际问题,这就是为什么我接受了这个答案,但SilentGhost回答了我应该问的问题。
很抱歉造成了混乱。
我想通过一个列表循环检查每个项目对它后面的一个。
是否有一种方法可以在y中循环使用x的最后一项?如果可以的话,我宁愿不使用索引。
Note
freespace回答了我的实际问题,这就是为什么我接受了这个答案,但SilentGhost回答了我应该问的问题。
很抱歉造成了混乱。
当前回答
for x in y[:-1]
如果y是一个生成器,那么上面的方法就行不通了。
其他回答
for x in y[:-1]
如果y是一个生成器,那么上面的方法就行不通了。
在迭代器中比较每一项而不实例化列表:
import itertools
it = (x for x in range(10))
data1, data2 = itertools.tee(it)
data2.next()
for a, b in itertools.izip(data1, data2):
print a, b
如果希望以成对的方式获取序列中的所有元素,可以使用这种方法(pairwise函数来自itertools模块中的示例)。
from itertools import tee, izip, chain
def pairwise(seq):
a,b = tee(seq)
b.next()
return izip(a,b)
for current_item, next_item in pairwise(y):
if compare(current_item, next_item):
# do what you have to do
如果需要将最后一个值与某个特殊值进行比较,请将该值链接到末尾
for current, next_item in pairwise(chain(y, [None])):
比较序列项的最简单方法如下:
for i, j in zip(a, a[1:]):
# compare i (the current) to j (the following)
如果你的意思是比较列表中的第n项和第n+1项,你也可以用
>>> for i in range(len(list[:-1])):
... print list[i]>list[i+1]
注意,这里没有硬编码。这应该是可以的,除非你有其他的感觉。