python之zip函数介绍

        Python中的zip()函数是一个非常有用的内置函数,它可以将多个可迭代对象(如列表、元组、字符串等)压缩成一个新的可迭代对象,其中每个元素都是一个由这些可迭代对象中对应元素组成的元组。下面是一些关于zip()函数的介绍:

1. 使用方式方法介绍

1.1 基本用法

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'c')]

1.2. 处理任意数量的可迭代对象

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = ['x', 'y', 'z']
zipped = zip(list1, list2, list3)
print(list(zipped))  # [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]

1.3. 当可迭代对象长度不同时,zip()函数会以最短的可迭代对象为准

list1 = [1, 2, 3]
list2 = ['a', 'b']
zipped = zip(list1, list2)

print(list(zipped))  # [(1, 'a'), (2, 'b')]

1.4. 可以用zip()函数来创建字典

keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict)  # {'a': 1, 'b': 2, 'c': 3}

1.5. 解压 zip() 对象

        zip()函数返回一个生成器对象,如果需要将其转换为列表或其他容器类型,需要使用list()或其他容器类型的构造函数

有时我们需要将 zip() 生成的元组拆分回原来的列表。可以使用 * 操作符来实现这一点

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
list1_out, list2_out = zip(*zipped)

print(list1_out)   # (1, 2, 3)
print(list2_out)   # ('a', 'b', 'c')

1.6. 与 enumerate() 函数配合使用 zip() 函数常常与 enumerate() 函数结合使用,以添加索引信息

fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
    print(i, fruit)
# 0 apple
# 1 banana 
# 2 cherry

for i, fruit in zip(range(len(fruits)), fruits):
    print(i, fruit)
# 0 apple
# 1 banana
# 2 cherry

1.7. 处理不同长度的可迭代对象 当输入的可迭代对象长度不同时,zip() 函数会自动截断到最短的那个

list1 = [1, 2, 3]
list2 = ['a', 'b']
zipped = zip(list1, list2)
print(list(zipped))  # [(1, 'a'), (2, 'b')]

1.8. 如果需要填充缺失的值,可以配合 itertools.zip_longest() 函数使用

from itertools import zip_longest

list1 = [1, 2, 3]
list2 = ['a', 'b']
zipped = zip_longest(list1, list2, fillvalue='x')
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'x')]

2. 性能

        zip() 函数是一个生成器函数,所以它只会在需要的时候生成元素。这使得它在处理大型数据集时更加高效和节省内存。但如果需要完整的结果列表,记得使用 list() 将其转换为列表。

3. 使用示例

下面介绍一些 zip() 函数的实际应用例子:

3.1  处理多个数据源

        假设你有一个学生成绩单,包含学生姓名和对应的英语、数学、编程三门课的成绩。你可以使用 zip() 函数将这些数据整合成一个方便处理的数据结构

names = ['Alice', 'Bob', 'Charlie']
english_scores = [85, 92, 78]
math_scores = [90, 85, 92]
programming_scores = [88, 90, 85]

student_data = list(zip(names, english_scores, math_scores, programming_scores))
print(student_data)
# [('Alice', 85, 90, 88), ('Bob', 92, 85, 90), ('Charlie', 78, 92, 85)]

        这样就可以方便地对学生成绩进行统计和分析了。

3.2 转换字典键值对

        有时我们需要将字典的键值对进行交换,zip() 函数可以很方便地实现这一点

dict1 = {'apple': 2, 'banana': 3, 'cherry': 1}
new_dict = dict(zip(dict1.values(), dict1.keys()))
print(new_dict)
# {2: 'apple', 3: 'banana', 1: 'cherry'}

3.3 计算多个列表的元素之和

        假设有三个列表,分别表示一个季度三个月的销售额,我们可以用 zip() 函数将这三个列表压缩,然后计算每个月的总销售额:

january_sales = [1000, 1200, 950]
february_sales = [900, 1100, 850]
march_sales = [1100, 1300, 1000]

monthly_sales = [sum(x) for x in zip(january_sales, february_sales, march_sales)]
print(monthly_sales)
# [3000, 3600, 2800]

3.4 并行迭代多个列表

当需要同时迭代多个列表时,zip() 函数也非常有用

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 32, 19]
cities = ['New York', 'London', 'Paris']

for name, age, city in zip(names, ages, cities):
    print(f"{name} is {age} years old and lives in {city}")
# Alice is 25 years old and lives in New York
# Bob is 32 years old and lives in London
# Charlie is 19 years old and lives in Paris

上述是 zip() 函数的一些常见应用场景,它在数据处理、转换和分析中都有非常广泛的应用。

4. 总结

        总的来说, zip() 函数是一个非常强大和灵活的 Python 内置函数,熟练掌握它的各种用法对于数据处理和转换非常有帮助。他可以帮助我们快速地组合和操作多个可迭代对象。它在数据转换和处理中非常常见和实用。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值