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

Python之zip()函数的用法及实用技巧

发布时间:2023-06-10 01:41:51

zip()函数是Python内置函数之一,用于将多个可迭代对象的元素一一对应地打包成一个元组的形式,返回一个zip对象。我们可以使用list()函数将zip()对象转化为列表或直接进行迭代操作。

zip()函数的使用方法

zip()函数的使用方法很简单,函数语法如下:

zip([iterable, ...])

其中,iterable代表一个或多个可迭代对象,可以是列表、元组、字典、集合、字符串等等。如果传入的可迭代对象长度不一致,则以最短长度的可迭代对象为准,最后多余的元素将会被忽略。

例如,我们定义了三个列表:

a = [1, 2, 3]

b = ['a', 'b', 'c']

c = [True, False]

然后使用zip()函数将它们打包:

d = zip(a, b, c)

打印d的结果为:

<zip object at 0x11481d7c0>

这是一个zip对象,我们可以使用list()函数将其转化为列表:

d_list = list(d)

打印d_list的结果为:

[(1, 'a', True), (2, 'b', False)]

这里,d_list中每个元素都是一个元组,元组中的每个元素分别对应着原始列表中相同下标的元素。 

实用技巧一:转换行列

zip()函数可以用于转换行列,在数据分析处理中,经常需要将行列做转换,例如将二维数组的行列互换,如下所示:

原始数组arr:

1  2  3

4  5  6

希望将其转换为:

1  4

2  5

3  6

这时可以使用zip()函数将原始数组的列打包成元组,最终再将元组归并为新的行。

arr = [[1, 2, 3], [4, 5, 6]]

new_arr = [list(i) for i in zip(*arr)]

print(new_arr)

运行结果为:

[[1, 4], [2, 5], [3, 6]]

实际上,zip(*arr)的返回结果是:

[(1, 4), (2, 5), (3, 6)]

这里使用了列表推导式将每个元组都转化为列表。

实用技巧二:多个列表的加法

另一个实用技巧是将多个列表的对应元素进行加法运算。例如,有两个长度相同的列表:

a = [1, 2, 3]

b = [4, 5, 6]

我们希望将它们的对应元素相加:

c = [i+j for i, j in zip(a, b)]

print(c)

输出结果为:

[5, 7, 9]

实现原理是先使用zip()函数将两个列表的对应元素打包成元组,然后使用列表推导式将每个元组中的数相加,最后返回一个新的列表。

总结

以上就是zip()函数的用法和两个实用技巧,zip()函数在处理类似于多个序列的数据并行处理上非常方便,可以满足我们的很多需求,特别是对于短序列、长序列不等长度的情况。