zip函数简介
在 Python 2.x中,zip() 函数返回的是一个列表。在Python3中,zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组(Tuple),然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号 [ ]。
语法格式
zip 语法格式:
代码语言:javascript复制zip([iterable, ...])
其中,iterable代表一个或多个迭代器。该方法会返回一个对象。
实例
以下实例展示了 zip 的使用方法:
代码语言:javascript复制a = [1, 2, 3]
b = [4, 5, 6]
zipped = zip(a, b) # 返回一个对象
print(zipped)
# 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
x1, y1 = zip(*zip(a, b))
print(list(x1))
print(list(y1))
可以使用 list() 转换来输出列表。
代码语言:javascript复制a = [1, 2, 3]
b = [4, 5, 6]
# list() 转换为列表
zip_list = list(zip(a, b))
print(zip_list)
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
代码语言:javascript复制a = [1, 2, 3]
c = [4, 5, 6, 7, 8]
# 元素个数与最短列表一致
print(list(zip(a, c)))
利用 ***** 号操作符,可以将元组解压为列表。
代码语言:javascript复制a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
zipped = zip(a, b) # 返回一个对象
# 利用 ***** 号操作符,可以将元组解压为列表
print(*zipped)
# 或
print(*zip(a, b))
与zip相反,zip(*) 可理解为解压,返回二维矩阵式:
代码语言:javascript复制a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
# 与zip相反,zip(*) 可理解为解压,返回二维矩阵式
x1, y1 = zip(*zip(a, b))
print(list(x1))
print(list(y1))
机器学习模型训练中,经常需要打乱数据集,用zip()函数可以实现:
代码语言:javascript复制# encoding=utf-8
# 机器学习模型训练中,经常需要打乱数据集,用zip()函数可以实现
import random
# 设置随机种子,保证每次生成随机相同,方便重现
random.seed(1)
x = [1, 2, 3, 4, 5, 6]
y = [0, 1, 0, 0, 1, 1]
# zip打包之后,用list转化为列表
zipped_data = list(zip(x, y))
print("原始数据:%s" % zipped_data)
# 打乱样本的数据,random使用的是原地操作的方式,没有任何返回值
# shuffle:打乱顺序
random.shuffle(zipped_data)
print("乱序数据:%s" % zipped_data)
# zip(*)反向解压,map()逐项转换类型,list()做最后转换
zipped_data2 = list(map(list, zip(*zipped_data)))
print(zipped_data2)