如何遍历除列表的最后一项之外的所有项目?

Dav*_*kes 142 python

我想循环检查每个项目的列表与其后面的项目.

有没有办法可以循环使用除了最后一项使用x中的所有项目?如果可以的话,我宁愿不使用索引.

注意

freespace回答了我的实际问题,这就是我接受答案的原因,但是SilentGhost回答了我应该问的问题.

为混乱道歉.

fre*_*ace 281

for x in y[:-1]
Run Code Online (Sandbox Code Playgroud)

如果y是发电机,那么上述将无效.

  • 仅仅因为OP应该在第一个问题中提出另一个问题,并不意味着他的问题和这个答案对其他人不是很有用.+1 (6认同)
  • 我想我做到了.作者说他想做X,然后问他怎么做Y.我回答他怎么做Y.他接受我的回答表明我回答了他问的问题,如果不是他真正想问的问题.我们欢迎Asker降级这个答案. (3认同)
  • - 1我认为不回答这个问题.它不是将每个项目与下一个项目进行比较. - 0秒前的odwl (2认同)
  • 您提到这不适用于生成器。当 `y` 是一个生成器时,有什么替代方案? (2认同)
  • 这不会创建一个新列表吗?好像很浪费 (2认同)

Sil*_*ost 46

将序列项与以下内容进行比较的最简单方法:

for i, j in zip(a, a[1:]):
     # compare i (the current) to j (the following)
Run Code Online (Sandbox Code Playgroud)

  • 这回答了我希望我提出的问题.谢谢 (13认同)
  • 实际上,您可以省略第一个切片,因为zip会将较长的列表截断为较短的长度.这将为您节省一个列表创建.(以防万一你正在处理巨大的清单.但在这种情况下,你应该遵循Ants Aasma的方法,它不会复制任何东西.) (3认同)

Ant*_*sma 19

如果要获得序列对中的所有元素,请使用此方法(成对函数来自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
Run Code Online (Sandbox Code Playgroud)

如果需要将最后一个值与某个特殊值进行比较,请将该值链接到结尾

for current, next_item in pairwise(chain(y, [None])):
Run Code Online (Sandbox Code Playgroud)


Per*_*der 5

如果你的意思是比较第n项和列表中的第n + 1项,你也可以这样做

>>> for i in range(len(list[:-1])):
...     print list[i]>list[i+1]
Run Code Online (Sandbox Code Playgroud)

请注意,那里没有硬编码.除非你有其他想法,否则这应该没问题.

  • 您可以用len(list) - 1替换len(list [: - 1])以避免列表副本.并避免使用名为list的变量... (3认同)