我想一次遍历一个Python列表并处理2个列表项。在另一种语言中是这样的:

for(int i = 0; i < list.length(); i+=2)
{
   // do something with list[i] and list[i + 1]
}

实现这一目标的最佳方法是什么?


当前回答

在我看来,最简单的就是:

it = iter([1,2,3,4,5,6])
for x, y in zip(it, it):
    print x, y

Out: 1 2
     3 4
     5 6

没有额外的进口或任何东西。在我看来,非常优雅。

其他回答

nums = range(10)
for i in range(0, len(nums)-1, 2):
    print nums[i]

有点脏,但是有用。

你可以使用步长为2的范围:

Python 2

for i in xrange(0,10,2):
  print(i)

Python 3

for i in range(0,10,2):
  print(i)

注意:在Python 2中使用xrange而不是range,因为它更有效,因为它生成一个可迭代对象,而不是整个列表。

如果你使用的是Python 2.6或更新版本,你可以使用itertools模块中的grouper recipe:

from itertools import izip_longest

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

像这样调用:

for item1, item2 in grouper(2, l):
    # Do something with item1 and item2

注意,在Python 3中。X您应该使用zip_longest而不是izip_longest。

在我看来,最简单的就是:

it = iter([1,2,3,4,5,6])
for x, y in zip(it, it):
    print x, y

Out: 1 2
     3 4
     5 6

没有额外的进口或任何东西。在我看来,非常优雅。

如果你可以控制列表的结构,最python化的做法可能是将其更改为:

l=[1,2,3,4]

to:

l=[(1,2),(3,4)]

然后,你的循环将是:

for i,j in l:
    print i, j