首页Python【Python内置函数】z...

【Python内置函数】zip()函数

Python 提供了许多内置函数,这些函数是Python语言的一部分,可以直接在Python程序中使用而无需导入任何模块。

本系列将会陆续整理分享一些的Python内置函数。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_built-in_functions





01
简介

zip() 函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)打包成一个元组的迭代器,每个元组包含来自每个输入可迭代对象的对应元素。

zip() 函数的基本语法如下:

zip(*iterables, strict=False)
参数说明:
  • *iterable:一个可迭代对象,比如列表、元组或字符串;
  • strict:影响函数在处理可迭代对象时的行为,特别是当可迭代对象长度不一时。默认值为 False ,此时函数会停止在最短的可迭代对象结束时,这意味着如果任何一个可迭代对象耗尽了,函数将不再产生任何元组。当设置为True时,如果输入的迭代器长度不一致,zip函数会引发一个ValueError异常。

返回值:

zip() 函数返回一个元组迭代器,其中第 i 个元组包含每个参数迭代器中的第 个元素。

02
使用

下面是一些使用 zip() 函数的示例:

  • 示例 1:基本使用

list1 = [1, 2, 3]
list2 = ['a''b''c']
zipped = zip(list1, list2)

# 打印 zip 对象(迭代器),不能直接显示结果
# print(zipped)  # <zip object at 0x0000016979C6B300>

# 转换为列表查看结果
print(list(zipped))
# 输出:[(1, 'a'), (2, 'b'), (3, 'c')]


  • 示例 2:多个可迭代对象

zip() 函数可以接受多个可迭代对象作为参数,将它们“压缩”在一起。

list1 = [1, 2, 3]
list2 = ['a''b''c']
list3 = [4, 5, 6]

zipped = zip(list1, list2, list3)
print(list(zipped))
# 输出:[(1, 'a', 4), (2, 'b', 5), (3, 'c', 6)]


  • 示例 3:与 * 运算符结合使用

如果需要解压 zip 对象,可以使用 * 操作符。

list1 = [1, 2, 3]
list2 = ['a''b''c']

x, y = zip(*zip(list1, list2))

list1 == list(x) and list2 == list(y)
# 输出:True


  • 示例 4:处理不等长的可迭代对象

有时传递给 zip() 函数的迭代对象可能有不同的长度,此时 Python 提供了三种不同的方法来处理这个问题:

①、默认情况下,zip() 会在最短的迭代项用完时停止。 它会忽略较长迭代中的剩余项目,将结果截断为最短迭代的长度。

list1 = [1, 2, 3, 4]
list2 = ['a''b''c']

zipped = zip(list1, list2)
print(list(zipped))
# 输出:[(1, 'a'), (2, 'b'), (3, 'c')]

②、如果设置 strict=True 参数,则与默认行为不同,如果一个迭代在其他迭代之前耗尽,会引发 ValueError

# 引发 ValueError
list1 = [1, 2, 3, 4]
list2 = ['a''b''c']

zipped = zip(list1, list2 , strict=True)

print(list(zipped))
# 输出:ValueError: zip() argument 2 is shorter than argument 1

③、当需要处理不等长的可迭代对象,并且希望所有元素都被处理时,可以使用 itertools.zip_longest() 函数。

from itertools import zip_longest
list1 = [1, 2, 3, 4]
list2 = ['a''b''c']

zipped = zip_longest(list1, list2, fillvalue='None')
print(list(zipped))
# 输出:[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'None')]


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments