Python中zip()函数的解析及其简单示例

译文 精选
开发 前端
在Python编程领域,zip() 函数以其简洁性而著称,它能够将多个列表或其他可迭代对象(如元组、集合乃至字符串)巧妙地合并成一个元组构成的可迭代对象。想象一下,它就像夹克上的拉链,巧妙地将两侧紧密连接在一起。

译者 | 刘涛

审校 | 重楼

在Python编程领域,zip() 函数以其简洁性而著称,它能够将多个列表或其他可迭代对象(如元组、集合乃至字符串)巧妙地合并成一个元组构成的可迭代对象。想象一下,它就像夹克上的拉链,巧妙地将两侧紧密连接在一起。

在本指南中,我们将通过简单实用的示例深入探讨 zip() 函数的来龙去脉,帮助你理解如何有效地使用它。

zip() 函数工作原理

zip() 函数根据位置将多个可迭代对象(如列表)中的元素配对。这意味着每个列表的首个元素将先被配对,然后是第二个元素,依此类推。如果可迭代对象的长度存在差异,zip()函数将在最短的可迭代对象结束时停止运行。

zip()函数的语法非常简单:

zip(*iterables)

你可以传入多个可迭代对象(例如列表、元组等),zip()函数会将它们组合成元组。

示例1:组合两个列表

让我们从一个简单的场景开始,假设我们有两个列表,想要将它们组合起来。想象一下,你有一个姓名列表和一个对应的分数列表,你期望将它们配对。

# Two lists to combine
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 88]

# Using zip() to combine them
zipped = zip(names, scores)

# Convert the result to a list so we can see it
zipped_list = list(zipped)
print(zipped_list)

在这个示例当中,zip() 函数把两个列表names 和 scores逐一对元素进行配对。names 中的第一个元素(“Alice”)与 scores 中的第一个元素(85)进行配对,依此类推。当我们把结果转化为列表时,其呈现出如下模样:

[('Alice', 85), ('Bob', 90), ('Charlie', 88)]

这使得以结构化的方式处理相关数据变得容易。

示例2:当列表长度不均等时会出现什么情况

假设你有不同长度的列表。那会发生什么呢?zip() 函数十分聪明,当它到达最短列表的末尾时会立即停止。

# Lists of different lengths
fruits = ["apple", "banana"]
prices = [100, 200, 150]

# Zipping them together
result = list(zip(fruits, prices))
print(result)

在这种情况下,fruits 列表有两个元素,而 prices 列表有三个。但 zip() 只会组合前两个元素,忽略 prices列表中多余的值。输出:

[('apple', 100), ('banana', 200)]

请注意,prices列表中的最后一个值(150)被忽略掉了,因为fruits列表中不存在第三个元素与它配对。zip() 函数能够确保在处理长度不均等的列表时不会产生错误,然而这也意味着倘若你的列表中元素不均衡,你或许会丢失一部分数据。

示例3:解压缩对象

若你期望对zip()操作进行反转,即在将两个列表进行压缩处理之后,你或许想要将它们再度拆解为单独的列表。此时,你可以使用解包运算符 * 来便捷地达成这一目标。

# Zipped lists
cities = ["New York", "London", "Tokyo"]
populations = [8000000, 9000000, 14000000]

zipped = zip(cities, populations)

# Unzipping them
unzipped_cities, unzipped_populations = zip(*zipped)

print(unzipped_cities)
print(unzipped_populations)

在这里,我们首先使用zip()函数将city和populations列表压缩在一起。然后,通过zip(*zipped)解压缩的方式,将合并后的元组“解压”回两个单独的列表。这里的*运算符起到了解包的作用,它将zipped(即之前通过zip()函数得到的元组迭代器)中的元组解包成它们原始的组成部分。输出:

('New York', 'London', 'Tokyo')
(8000000, 9000000, 14000000)

这个示例展示了如何反转压缩(zipping)过程以恢复原始数据。

示例4:压缩两个以上列表

在使用 zip() 函数时,并非局限于仅对两个列表进行压缩。你能够依据自身需求对任意数量的可迭代对象进行压缩。以下呈现的是一个包含三个列表的实例。

# Three lists to zip
subjects = ["Math", "English", "Science"]
grades = [88, 79, 92]
teachers = ["Mr. Smith", "Ms. Johnson", "Mrs. Lee"]

# Zipping three lists together
zipped_info = zip(subjects, grades, teachers)

# Convert to a list to see the result
print(list(zipped_info))

在这个示例中,我们将压缩三个列表——subjects、grades和 teachers。来自每个列表的第一个项目被组合在一起,随后是第二个,依此类推。 输出:

[('Math', 88, 'Mr. Smith'), ('English', 79, 'Ms. Johnson'), ('Science', 92, 'Mrs. Lee')]

这样,可以将多个相关的信息片段组合成易于处理的元组。

示例5:压缩字符串

在Python中,字符串也是可迭代对象,因此可以像处理列表一样对它们使用zip()函数。让我们尝试将两个字符串组合在一起。

# Zipping two strings
str1 = "ABC"
str2 = "123"

# Zipping the characters together
zipped_strings = list(zip(str1, str2))
print(zipped_strings)

在这个示例中,str1的第一个字符将与str2的第一个字符组合在一起,以此类推。输出:

[('A', '1'), ('B', '2'), ('C', '3')]

如果你需要处理多个字符串中的字符,或者将多个字符串中的字符进行配对组合,那么这会特别有用。

示例6:压缩字典

尽管字典(dictionaries )与列表存在些许差异,但是你依然能够运用 zip() 将它们组合起来。默认状况下,zip()仅仅会压缩字典的键(keys)。下面让我们来看一个示例:

# Two dictionaries
dict1 = {"name": "Alice", "age": 25"}
dict2 = {"name": "Bob", "age": 30"}

# Zipping dictionary keys
zipped_keys = list(zip(dict1, dict2))
print(zipped_keys)

在这里, zip() 将两个字典中的键配对。输出:

[('name', 'name'), ('age', 'age')]

如果你想压缩字典的值,你可以使用.values()方法来实现:

zipped_values = list(zip(dict1.values(), dict2.values()))
print(zipped_values)

输出:

[('Alice', 'Bob'), (25, 30)]

现在,你可以轻松地组合两个字典的值。

示例7:在循环中使用 zip()

zip() 最常见的用途之一是在循环(loops)中,当你想同时处理多个列表时。下面是一个示例:

# Lists of names and scores
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 88]

# Using zip() in a loop
for name, score in zip(names, scores):
 print(f"{name} scored {score}")

这个循环同时遍历了names和scores两个列表,将每个名字与其对应的分数进行配对。输出:

Alice scored 85
Bob scored 90
Charlie scored 88

在循环中使用zip()函数,当处理相关数据时,可以使的代码更加整洁和易于阅读

结论

zip()函数是Python中一个非常实用的工具,它允许将多个可迭代对象组合成元组,从而更容易地处理相关数据。无论是在将列表、元组或字符串中的项目配对,zip()都能简化的代码,并且在循环中特别有用。

通过本文中的示例,应该对如何在各种情况下使用zip()有了很好的理解。

如果发现这个关于Pythonzip()函数的解释很有帮助,那么可能会喜欢我在博客上分享的更多深入编程教程和概念。

译者介绍

刘涛,51CTO社区编辑,某大型央企系统上线检测管控负责人。

原文标题:Python’s zip() Function Explained with Simple Examples,作者:Sahil Mahapatra


责任编辑:华轩 来源: 51CTO
相关推荐

2023-03-25 20:13:28

Python

2023-02-14 16:45:54

2020-05-11 09:38:52

Python开发函数

2011-04-08 15:50:54

Oracleover函数

2010-03-05 09:49:34

Python文件操作

2023-09-20 00:08:37

2009-08-20 16:35:39

什么是WMI

2010-07-06 14:12:58

SQL Server数

2010-09-01 09:40:33

DB2函数OLAP

2024-11-09 08:26:52

Python装饰器

2009-02-10 10:57:09

危险函数PHPCLI

2019-04-08 10:36:23

SCSILinux内核

2023-03-28 09:58:56

Python变量

2011-07-11 14:53:01

java主函数

2024-08-06 16:04:03

2010-03-19 14:44:30

Python模块级函数

2009-07-14 14:04:36

WebWork框架

2010-03-05 10:36:52

Python调用zip

2011-07-22 12:22:49

室内光缆

2024-05-15 09:16:05

点赞
收藏

51CTO技术栈公众号