欢迎访问宙启技术站
智能推送

Python中zip函数的用法及实例演示

发布时间:2023-06-23 04:56:42

Python是一门非常流行的编程语言,有着丰富的内置函数和标准库。其中,zip() 函数是一个非常实用的函数,它可以将多个可迭代对象打包成一个元组,并返回一个可迭代的zip对象。本文将探讨zip函数的用法及实例演示。

1. zip函数的用法

zip函数的语法格式如下:

zip(iterable1, iterable2, iterable3, ...)

其中,iterable1, iterable2, iterable3...为可迭代对象,即可以被 for 循环遍历的对象,如列表、元组、字典、集合、字符串等。

zip函数的返回值是一个zip对象,它内部包含着一组元组,每个元组包含了来自各个可迭代对象的构成元素,如下所示:

zip_obj = zip(iterable1, iterable2, iterable3, ...)
for item in zip_obj:
    print(item)          # (iterable1[0], iterable2[0], iterable3[0]), (iterable1[1], iterable2[1], iterable3[1]), ...

需要注意的是,zip函数只会返回元素最少的可迭代对象中包含的项数,而且zip对象只能被迭代一次,一旦遍历结束,就不能再次遍历了。

2. 实例演示

接下来,让我们通过几个实例演示,来更深入地理解zip函数的用法。

2.1 zip函数的基本用法

我们先看一下zip函数的基本用法。我们定义两个列表,分别为names和scores,然后用zip函数将它们打包成一个新的zip对象,最后通过for循环遍历这个zip对象,输出每个元组。

names = ['Tom', 'Jerry', 'Mickey']
scores = [90, 85, 92]

zip_obj = zip(names, scores)

for item in zip_obj:
    print(item)

输出结果如下:

('Tom', 90)
('Jerry', 85)
('Mickey', 92)

2.2 zip函数的扩展用法

除了上面的基本用法,zip函数还有一些扩展用法。下面我们分别介绍一下这些用法的实现方法。

2.2.1 两个列表的对应元素相乘

我们定义两个列表a和b,含有5个数值型元素,然后通过zip函数将它们打包成一个新的zip对象。接着,再用列表推导式对每个元组进行处理,将两个列表的对应元素相乘,生成新的列表c。

a = [1, 2, 3, 4, 5]
b = [10, 20, 30, 40, 50]

c = [x * y for x, y in zip(a, b)]
print(c)

输出结果如下:

[10, 40, 90, 160, 250]

2.2.2 将两个列表作为字典的键值对

我们定义两个列表keys和values,分别含有3个字符串型元素。然后通过zip函数将它们打包成一个新的zip对象。接着,我们将这个zip对象转换成字典,其中 个列表作为字典的键,第二个列表作为字典的值。

keys = ['name', 'age', 'gender']
values = ['Tom', '20', 'male']

dict_obj = dict(zip(keys, values))
print(dict_obj)

输出结果如下:

{'name': 'Tom', 'age': '20', 'gender': 'male'}

2.2.3 按列读取CSV文件

我们定义一个变量filename,该变量存放CSV文件的路径。CSV文件的结构如下:

name,score,age
Tom,90,20
Jerry,85,21
Mickey,92,19

我们通过open函数打开CSV文件,并用zip函数对它进行处理。zip函数返回的是一个可迭代的zip对象,我们可以对它进行遍历。在每轮遍历中,我们需要将每个元组中的三个元素分别赋值给name、score、age三个变量,并将它们输出到控制台。

filename = 'data.csv'

with open(filename, 'r') as f:
    csv_data = f.readlines()

# 抽取表头
header = csv_data[0].strip().split(',')

# 抽取数据
rows = [row.strip().split(',') for row in csv_data[1:]]

# 转置数据
cols = [list(x) for x in zip(*rows)]

# 输出数据
for i, col in enumerate(cols):
    print(header[i] + ':')
    for j, value in enumerate(col):
        print('\t' + rows[j][i].ljust(10), end='')
    print('
')

输出结果如下:

name:
	Tom       Jerry     Mickey    

score:
	90        85        92        

age:
	20        21        19        

3. 总结

本文介绍了Python中zip函数的用法及实例演示,总结一下,zip函数的功能非常强大,它可以将多个可迭代对象打包成一个元组,并返回一个可迭代的zip对象。zip函数能够有效地提高代码的复用性和可读性,对于一些数据处理任务,它是非常实用的工具之一。