Python3中zip函数使用详解

2023-05-03 11:59:46 浏览数 (1)

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)

0 人点赞