Python 中的打包组合

文摘   科技   2025-01-18 08:08   上海  
点击蓝字,关注山海摸鱼人

zip 函数是 Python 内置的一个强大工具,它可以将多个可迭代对象“打包”在一起。

假设有几个不同的列表,每个列表里装着不同的信息,zip 函数可以把这些列表中相同位置的元素一一对应地组合起来,变成一个个元组,最终形成一个新的可迭代对象。

组合多个可迭代对象

names = ["山海摸鱼人""山海闲游者""山海逍遥客"]
ages = [253035]
jobs = ["侠客""浪人""闲云野鹤"]
# 使用 zip 函数将多个可迭代对象组合
zipped_result = zip(names, ages, jobs)
# 把组合后的结果转换为列表,方便查看
result_list = list(zipped_result)
print(result_list)

输出结果

[('山海摸鱼人', 25, '侠客'), ('山海闲游者', 30, '浪人'), ('山海逍遥客', 35, '闲云野鹤')]

通过这个例子,我们可以看到 zip 函数将 namesages 和 jobs 中相同位置的元素依次组合成了元组,最终形成了一个新的列表。

用于并行迭代

在实际编程中,我们经常需要同时遍历多个列表,这时候 zip 函数就派上大用场啦!我们可以使用 zip 函数和 for 循环,避免使用复杂的索引来访问不同列表中的元素哦。

shan_hai_names = ["山海悠游人""山海游荡者""山海游手好闲者"]
shan_hai_ages = [404550]
shan_hai_jobs = ["渔夫""猎人""工匠"]
# 使用 zip 函数并行遍历多个列表
for name, age, job in zip(shan_hai_names, shan_hai_ages, shan_hai_jobs):
    print(f"姓名:{name},年龄:{age},职业:{job}")

输出结果

姓名:山海悠游人,年龄:40,职业:渔夫
姓名:山海游荡者,年龄:45,职业:猎人
姓名:山海游手好闲者,年龄:50,职业:工匠

这种方式是不是比使用下标索引来访问列表元素简单多啦?这样的代码也更加简洁、易读。

处理不同长度的可迭代对象

有时候,我们要组合的可迭代对象长度可能不一样,这时候 zip 会怎么做呢?

shan_hai_list1 = ["山海悠然者""山海闲适者""山海浪人"]
shan_hai_list2 = [5560]
# 使用 zip 函数组合不同长度的列表
zipped_result = zip(shan_hai_list1, shan_hai_list2)
result_list = list(zipped_result)
print(result_list)

输出结果

[('山海悠然者', 55), ('山海闲适者', 60)]

当使用 zip 函数组合它们时,它会以最短的可迭代对象为准。所以,最终结果只会包含两个元组,因为 shan_hai_list2 是最短的。

这个特性可以帮助我们避免一些潜在的错误,比如处理数据时,如果数据长度不一致,zip 会自动根据最短的可迭代对象来组合,避免了越界访问的问题。

数据的组合和分离操作

我们不仅可以组合数据,还可以使用 zip 函数将组合后的数据分离哦,这时候就需要用到星号解包啦。

data_x = [1234]
data_y = (10203040)
data_z = {100200300400}
combined_data = list(zip(data_x, data_y, data_z))
# 分离组合后的数据
separated_x, separated_y, separated_z = zip(*combined_data)
print("\n分离后的数据:")
print("X 数据:", list(separated_x))
print("Y 数据:", list(separated_y))
print("Z 数据:", list(separated_z))

输出结果

分离后的数据:
X 数据: [1, 2, 3, 4]
Y 数据: [10, 20, 30, 40]
Z 数据: [100, 200, 300, 400]

separated_x, separated_y, separated_z = zip(*combined_data):使用星号解包将组合后的数据分离,这里的 *combined_data 会将 combined_data 中的元组元素展开,然后 zip 函数将它们重新组合,最终我们可以得到三个分离的数据列表。

与 dict 函数结合生成字典

zip 函数还可以和 dict 函数一起使用,将两个列表组合成一个字典哦,其中一个列表作为键,另一个列表作为值。

keys = ["山海闲人""山海游民""山海闲逛者"]
values = ["无所事事""四处游走""闲逛"]
# 使用 zip 函数将两个列表组合成字典
result_dict = dict(zip(keys, values))
print(result_dict)

输出结果

{'山海闲人''无所事事''山海游民''四处游走''山海闲逛者''闲逛'}

将嵌套列表进行转置

zip 函数还可以帮助我们将嵌套列表进行转置哦,这在处理矩阵或表格数据时非常有用呢。

shan_hai_matrix = [[123], [456], [789]]
# 使用 zip 函数转置嵌套列表
transposed_matrix = list(zip(*shan_hai_matrix))
print("转置前的矩阵:")
print(shan_hai_matrix)
print("\n转置后的矩阵:")
print(transposed_matrix)

输出结果

转置前的矩阵:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

转置后的矩阵:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

对两个列表进行计算操作

我们可以使用 zip 函数对两个列表中的元素进行计算操作,比如将两个列表中的元素相加、相乘等。

list1 = [1234]
list2 = [10203040]
# 对两个列表中的元素相加
result_list = [x + y for x, y in zip(list1, list2)]
print("相加后的结果:")
print(result_list)

输出结果

相加后的结果:
[11, 22, 33, 44]

这里使用了列表推导式和 zip 函数,将两个列表中相同位置的元素相加,生成一个新的列表。

山海摸鱼人
致力于记录美好之瞬间,追寻美好之明天。
 最新文章