多个容器同时进行迭代的方法

  啃了一段时间的python cookbook总算看到30%左右的样子,怕是战线拉太长,到时候看完前面都快忘了,还是要多记多用。
  有时候我们可能会需要对多个容器同时进行迭代,下面记录一下一些方法。

zip()

可以对多个序列同时进行迭代,需要注意的是,当其中任一序列迭代完成,整个迭代将不在继续进行。

    a = [i for i in range(10) if i % 2 == 0]
    b = [i for i in range(10) if i % 2 != 0]
    c = [i for i in range(10)]

    for item in zip(a, b, c):
        print(item)

结果如下

(0, 1, 0)
(2, 3, 1)
(4, 5, 2)
(6, 7, 3)
(8, 9, 4)

可以使用zip来创建字典

    key = ['name', 'birthday', 'shares']
    value = ['johnny', 20200905, 20]
    s = dict(zip(key, value))
    print(s)

结果如下

{'name': 'johnny', 'birthday': 20200905, 'shares': 20}

zip_longest

上文说到的zip当最短序列迭代结束后,整个迭代就会结束,使用zip_longest则可迭代至最长序列结束。缺失的元素使用None来填充。

    from itertools import zip_longest
    a = [i for i in range(10) if i % 2 == 0]
    b = [i for i in range(10) if i % 2 != 0]
    c = [i for i in range(10)]
    for item in zip_longest(a, b, c):
        print(item)

结果如下

(0, 1, 0)
(2, 3, 1)
(4, 5, 2)
(6, 7, 3)
(8, 9, 4)
(None, None, 5)
(None, None, 6)
(None, None, 7)
(None, None, 8)
(None, None, 9)

chain()

前面两种方法是同时对几个序列进行迭代,使用chain()可以将两个容器视为一个进行迭代

    from itertools import chain
    a = [i for i in range(10) if i % 2 == 0]
    b = [i for i in range(10) if i % 2 != 0]
    for item in chain(a, b):
        print(item, end=',')

结果如下:

0,2,4,6,8,1,3,5,7,9,

merge()

chain()不会对两个序列的内容顺序进行改变,使用merge()会对两个序列的内容进行重新排序。

 from heapq import merge
    a = [i for i in range(10) if i % 2 == 0]
    b = [i for i in range(10) if i % 2 != 0]
    for item in merge(a, b):
        print(item, end=',')

结果如下:

0,1,2,3,4,5,6,7,8,9,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值