迭代列表中的每两个元素

迭代列表中的每两个元素

我该怎么做for循环还是一个列表理解,这样每次迭代就给了我两个元素?

l = [1,2,3,4,5,6]for i,k in ???:
    print str(i), '+', str(k), '=', str(i+k)

产出:

1+2=3
3+4=7
5+6=11


慕村225694
浏览 667回答 3
3回答

繁星淼淼

你需要一个pairwise()(或grouped())执行。对于Python 2:from itertools import izipdef pairwise(iterable):     "s -> (s0, s1), (s2, s3), (s4, s5), ..."     a = iter(iterable)     return izip(a, a)for x, y in pairwise(l):    print "%d + %d = %d" % (x, y, x + y)或者更笼统地说:from itertools import izipdef grouped(iterable, n):     "s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..."     return izip(*[iter(iterable)]*n)for x, y in grouped(l, 2):    print "%d + %d = %d" % (x, y, x + y)在Python 3中,您可以替换izip内建的zip()函数,并删除import.全贷给马丁诺为他的回答到我的问题,我发现这是非常有效的,因为它只在列表上迭代一次,并且不会在过程中创建任何不必要的列表。N.B.*这不应与pairwise配方在Python自己的itertools文献资料,它会产生s -> (s0, s1), (s1, s2), (s2, s3), ...,正如@lazyr在评论中。

吃鸡游戏

你需要两个元素的元组,所以data = [1,2,3,4,5,6]for i,k in zip(data[0::2], data[1::2]):     print str(i), '+', str(k), '=', str(i+k)其中:data[0::2]意味着创建以下元素的子集集合(index % 2 == 0)zip(x,y)从x和y集合创建一个元组集合,相同的索引元素。

守着一只汪

>>> l = [1,2,3,4,5,6]>>> zip(l,l[1:])[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]>>> zip(l,l[1:])[::2][(1, 2), (3, 4), (5, 6)]>>> [a+b for a,b in zip(l,l[1:])[::2]][3, 7, 11]>>> ["%d + %d = %d" % (a,b,a+b) for a,b in zip(l,l[1:])[::2]]['1 + 2 = 3', '3 + 4 = 7', '5 + 6 = 11']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python