为了账号安全,请及时绑定邮箱和手机立即绑定

迭代列表中的每两个元素

迭代列表中的每两个元素

慕村225694 2019-06-14 10:29:52
迭代列表中的每两个元素我该怎么做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
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

你需要一个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在评论中。


查看完整回答
反对 回复 2019-06-14
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

你需要两个元素的元组,所以

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集合创建一个元组集合,相同的索引元素。


查看完整回答
反对 回复 2019-06-14
?
守着一只汪

TA贡献1872条经验 获得超3个赞

>>> 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']


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 665 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信