Python:解析zip函数和zip_longest函数

zip:用来使列表一一对应,该函数返回一个以元组为元素的列表。返回的列表长度为最短列表的长度

当只有一个参数时:

letter = ['a', 'b', 'c', 'd']
dd = list(zip(letter))
print(dd)

输出结果:
[('a',), ('b',), ('c',), ('d',)]

当有两个参数时:

letter = ['a', 'b', 'c', 'd']
num = [1, 2, 3]
dd = list(zip(letter, num))
print(dd)

输出结果:
[('a', 1), ('b', 2), ('c', 3)]

当有多个参数时:

letter = ['a', 'b', 'c', 'd']
num = [1, 2, 3]
name = ['daicy', 'zhangsan']

dd = list(zip(letter, num, name))
print(dd)
输出结果:
[('a', 1, 'daicy'), ('b', 2, 'zhangsan')]

zip_longest具体可以用来对列表的一一对应,如果列表的长度不一致,则其会选择最长的那个列表,并将没有的填充为None(这个可以自己传参时设置)
例子如下:
当只有一个参数时:

letter = ['a', 'b', 'c', 'd']
num = [1, 2, 3]
name = ['daicy', 'zhangsan']
dic =[ll for ll in zip_longest(letter)]
print(dic)
输出结果:
[('a',), ('b',), ('c',), ('d',)]

当有两个参数时:

letter = ['a', 'b', 'c', 'd']
num = [1, 2, 3]
dic1 =[ll for ll in zip_longest(letter, num)]
print(dic1)
dic2 ={ll:nn for ll,nn in zip_longest(letter, num)}##这里可以对指定元组中的每一个元素进行操作
print(dic2)

输出结果:
[('a', 1), ('b', 2), ('c', 3), ('d', None)]
{'a': 1, 'b': 2, 'c': 3, 'd': None}

当有多个参数时:

letter = ['a', 'b', 'c', 'd']
num = [1, 2, 3]
name = ['daicy', 'zhangsan']
dic =[ll for ll in zip_longest(letter, num, name)]
print(dic)
输出结果:
[('a', 1, 'daicy'), ('b', 2, 'zhangsan'), ('c', 3, None), ('d', None, None)]

最后 附上zip_longest源码:

def zip_longest(*args, fillvalue=None):
    # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
    iterators = [iter(it) for it in args]
    num_active = len(iterators)
    if not num_active:
        return
    while True:
        values = []
        for i, it in enumerate(iterators):
            try:
                value = next(it)
            except StopIteration:
                num_active -= 1
                if not num_active:
                    return
                iterators[i] = repeat(fillvalue)
                value = fillvalue
            values.append(value)
        yield tuple(values)
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值