如何以两个为单位循环遍历列表?[重复]
- 2025-03-18 08:55:00
- admin 原创
- 39
问题描述:
我想循环遍历 Python 列表并一次处理 2 个列表项。其他语言中的情况类似:
for(int i = 0; i < list.length(); i+=2)
{
// do something with list[i] and list[i + 1]
}
实现这一目标的最佳方法是什么?
解决方案 1:
您可以使用range
步长为 2:
Python 2
for i in xrange(0,10,2):
print(i)
Python 3
for i in range(0,10,2):
print(i)
注意:xrange
在 Python 2 中使用而不是range
,因为它生成可迭代对象而不是整个列表,因此效率更高。
解决方案 2:
您还可以使用以下语法(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
其中第一位数字是起始索引(默认为列表开头或 0),第二位数字是结束切片索引(默认为列表结尾),第三位数字是偏移量或步长。
解决方案 3:
我认为最简单的就是这个:
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
没有额外的导入或任何东西。而且在我看来非常优雅。
解决方案 4:
如果您使用的是 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)
像这样调用:
for item1, item2 in grouper(2, l):
# Do something with item1 and item2
请注意,在 Python 3.x 中您应该使用zip_longest
而不是izip_longest
。
解决方案 5:
nums = range(10)
for i in range(0, len(nums)-1, 2):
print nums[i]
虽然有点脏,但是还是很管用。
解决方案 6:
这可能不如 izip_longest 解决方案那么快(我实际上没有测试过它),但它可以与 python <2.6 一起使用(izip_longest 是在 2.6 中添加的):
from itertools import imap
def grouper(n, iterable):
"grouper(3, 'ABCDEFG') --> ('A,'B','C'), ('D','E','F'), ('G',None,None)"
args = [iter(iterable)] * n
return imap(None, *args)
如果需要使用 2.3 之前的版本,可以使用内置 map 替代 imap。缺点是它不提供自定义填充值的功能。
解决方案 7:
如果你可以控制列表的结构,那么最符合 Python 风格的做法可能是将其从:
l=[1,2,3,4]
到:
l=[(1,2),(3,4)]
然后,你的循环将是:
for i,j in l:
print i, j
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD