fro*_*die 231 python iteration loops for-loop list
我想循环遍历Python列表并一次处理2个列表项.用另一种语言这样的东西:
for(int i = 0; i < list.length(); i+=2)
{
// do something with list[i] and list[i + 1]
}
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?
Bri*_*ndy 346
您可以在步长为2的范围内使用:
Python 2
for i in xrange(0,10,2):
print(i)
Run Code Online (Sandbox Code Playgroud)
Python 3
for i in range(0,10,2):
print(i)
Run Code Online (Sandbox Code Playgroud)
注意:在Python 2中使用xrange而不是range,因为它在生成可迭代对象时效率更高,而不是整个列表.
jat*_*ism 84
您也可以使用此语法(L[start:stop:step]):
mylist = [1,2,3,4,5,6,7,8,9,10]
for i in mylist[::2]:
print i,
# prints 1 3 5 7 9
for i in mylist[1::2]:
print i,
# prints 2 4 6 8 10
Run Code Online (Sandbox Code Playgroud)
第一个数字是起始索引(默认为列表的开头或0),第二个数字是结束切片索引(默认为列表的结尾),第三个数字是偏移量或步长.
car*_*arl 45
我认为最简单的就是:
it = iter([1,2,3,4,5,6])
for x, y in zip(it, it):
print x, y
Run Code Online (Sandbox Code Playgroud)
没有额外的进口或任何东西 在我看来,非常优雅.
Mar*_*ers 41
如果你正在使用Python 2.6或更新版本,你可以使用石斑鱼食谱从itertools模块:
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)
Run Code Online (Sandbox Code Playgroud)
像这样打电话:
for item1, item2 in grouper(2, l):
# Do something with item1 and item2
Run Code Online (Sandbox Code Playgroud)
请注意,在Python 3.x中,您应该使用zip_longest而不是izip_longest.
nums = range(10)
for i in range(0, len(nums)-1, 2):
print nums[i]
Run Code Online (Sandbox Code Playgroud)
有点脏但是可以用。