P进阶_(zip函数)

源码:

    class zip(object)
 |  zip(*iterables) --> A zip object yielding tuples until an input is exhausted.
 |
 |     >>> list(zip('abcdefg', range(3), range(4)))
 |     [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
 |
 |  The zip object yields n-length tuples, where n is the number of iterables
 |  passed as positional arguments to zip().  The i-th element in every tuple
 |  comes from the i-th iterable argument to zip().  This continues until the
 |  shortest argument is exhausted.

说明:

"""
类 zip(对象) | zip(iterables) --> 一个 zip 对象产生元组,直到输入用尽。
 | | >>> list(zip('abcdefg', range(3), range(4)))
 |     [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
 | | zip 对象产生 n 长度的元组,
    其中 n 是可迭代的数量 |作为位置参数传递给 zip()。
    每个元组中的第 i 个元素 |来自 zip() 的第 i 个可迭代参数。
    这种情况一直持续到 |最短的论点已用尽。
    

返回元组的迭代器,其中第i个元组包含来自每个参数序列或可迭代对象的第i个元素。
当最短的输入迭代用完时,迭代器停止。使用单个可迭代参数,它返回一个 1 元组的迭代器。
没有参数,它返回一个空的迭代器

并行迭代几个可迭代对象,生成元组,每个对象都有一个项目。
Python 的zip()函数定义为zip(*iterables).
该函数将可迭代对象作为参数并返回一个迭代器。
此迭代器生成一系列元组,其中包含来自每个可迭代对象的元素。
zip()可以接受任何类型的可迭代对象,例如文件、列表、元组、字典、集合等。
"""

举例

'相当于合并每个可迭代类型的对应索引值'
'不同的数据类型均可以'

'当最短的输入迭代用完时,迭代器停止,例如下文中的字典到4,到3的区别'
res = list(zip('1234', (111, 222, 333, 444), range(4), {"1": 1, "2": 2, "3": 3, "4": 4}))
res1 = list(zip('1234', (111, 222, 333, 444), range(4), {"1": 1, "2": 2, "3": 3}))
# res = help(zip)
print(res)  # [('1', 111, 0, '1'), ('2', 222, 1, '2'), ('3', 333, 2, '3'), ('4', 444, 3, '4')]
print(res1)  # [('1', 111, 0, '1'), ('2', 222, 1, '2'), ('3', 333, 2, '3')] 这里就少了一个值.


'使用zip函数将返回一个生成长度元组的迭代器n'
'解迭代器,使用list,tuple均可,使用[],()不行'
'迭代器可以使用for 循环获取数据'
res = zip('1234', (111, 222, 333, 444), range(4), {"1": 1, "2": 2, "3": 3, "4": 4})
print(res)  # <zip object at 0x000002B3B3BD9380>
res = tuple(res)
print(res)

保留所有值

'会用None填充'
from itertools import zip_longest

res = list(zip_longest('1234', (111, 222, 333, 444), range(5)))
print(res)  # [('1', 111, 0), ('2', 222, 1), ('3', 333, 2), ('4', 444, 3), (None, None, 4)]

不传递参数

res = zip()
print(res)  # <zip object at 0x00000204966DD880>
print(list(res))  # []

'尝试强制空迭代器直接产生一个元素,会得到一个StopIteration '
# next(res) # error StopIteration

一个参数

name = ["小A"]
res = list(zip(name))
print(res)  # [('小A',)]

强制长度一样

# py>=310
name = ["小A"]
behavior = ["小B", "吃饭"]
print(list(zip(name, behavior)))  # [('小A', '小B')]
print(list(zip_longest(name, behavior)))  # [('小A', '小B'), (None, '吃饭')]

'strict=True'
'>=310'


# print(list(zip(name,behavior), strict=True)) # zip() argument 2 is longer than argument 1
'<310'
#  print(list(zip(name,behavior), strict=True)) list() takes no keyword arguments

元祖列表

'元组列表,zip()与解包运算符*一起使用'
behavior = (["小B", "没吃饭"], ["小A", "没吃饭"])
print(list(zip(*behavior)))  # [('小B', '小A'), ('没吃饭', '没吃饭')]
name, beh = zip(*behavior)
print(name, beh)  # ('小B', '小A') ('没吃饭', '没吃饭')

排序

'通过第一个列表值排序,zip()的第一个列表'
letters = ['b', 'a', 'd', 'c']
numbers = [2, 4, 3, 1]
data = sorted(zip(letters, numbers))  # Sort by letters
print(data)  # [('a', 4), ('b', 2), ('c', 1), ('d', 3)]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值