Python之zip()函数的用法及实用技巧
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()函数在处理类似于多个序列的数据并行处理上非常方便,可以满足我们的很多需求,特别是对于短序列、长序列不等长度的情况。
