文章目录

  • zip() 函数
  • python 3中zip()方法合并列表后生成的是 zip 对象
  • 使用 list 方法可以将zip()变成列表。
  • 使用 dict 方法可以将zip()变成字典。
  • zip()元组对的数量以合并列表的最短长度为准
  • zip()将列表和列表合并
  • zip()将列表和元组合并
  • zip()将列表和字符串合并
  • zip()将字符串和字符串合并
  • zip()将元组和元组合并
  • 注意: zip()对象支持直接遍历,不需要先转成 list 或 dict:
  • zip(*some_list)
  • zip(*some_list) 方法可以实现元组列表的反向解压,只支持元组和列表,不支持 dict 直接解压。
  • zip(*some_list) 反向解压列表
  • zip(*some_list) 反向解压列元组
  • zip(*some_list) 不支持直接反向解压列字典


zip() 函数

1、zip() 函数来可以把 2 个或多个列表合并,并创建一个元组对的列表,元组对的数量以合并列表的最短长度为准。
2、python 3中zip 方法合并列表后生成的是 zip 对象。
3、使用 list 方法可以将其变成列表。
4、使用 dict 方法可以将其变成字典。
5、实际上 zip 方法支持所有可迭代对象(字符串、列表、元祖、字典),而不仅仅是列表。利用这个特性,可以很容易创建各种字典,包括很复杂的字典。

python 3中zip()方法合并列表后生成的是 zip 对象

l1 = [ 1, 2, 3 ]
l2 = [ 'x', 'y', 'z']
l3 = [ 'x', 'y' ]
zip(l1, l2)
<zip object at 0x031D6828>

使用 list 方法可以将zip()变成列表。

l1 = [ 1, 2, 3 ]
l2 = [ 'x', 'y', 'z']
l3 = [ 'x', 'y' ]
print(list(zip(l1, l2)))
[(1, 'x'), (2, 'y'), (3, 'z')]

使用 dict 方法可以将zip()变成字典。

l1 = [ 1, 2, 3 ]
l2 = [ 'x', 'y', 'z']
l3 = [ 'x', 'y' ]
print(dict(zip(l1,l3)))
{1: 'x', 2: 'y'}

zip()元组对的数量以合并列表的最短长度为准

l1 = [ 1, 2, 3 ]
l2 = [ 'x', 'y', 'z']
l3 = [ 'x', 'y' ]
print(list(zip(l1, l3)))
[(1, 'x'), (2, 'y')]

zip()将列表和列表合并

l1 = [1, 2, 3]
l2 = ['a','b','c']
print(dict(zip(l1, l2)))

输出结果:
{1: 'a', 2: 'b', 3: 'c'}

zip()将列表和元组合并

l1 = [1, 2, 3]
l2 =('a','b','c')
print(dict(zip(l1, l2)))

输出结果:
{1: 'a', 2: 'b', 3: 'c'}

zip()将列表和字符串合并

l1 = [1, 2, 3]
str1 = "abc"
print(dict(zip(l1, str1)))

输出结果:
{1: 'a', 2: 'b', 3: 'c'}

zip()将字符串和字符串合并

l1 ='abc'
l2 ='xyz'
print(dict(zip(l1, l2)))

输出结果:
{'a': 'x', 'b': 'y', 'c': 'z'}

zip()将元组和元组合并

l1 = (1, 2, 3)
l2 =('a','b','c')
print(dict(zip(l1, l2)))

输出结果:
{1: 'a', 2: 'b', 3: 'c'}

注意: zip()对象支持直接遍历,不需要先转成 list 或 dict:

name = ["John", "Jim", "Lucy"]
year = [1983, 1985, 1995]
for name, year in zip(name, year):
    print("{} - {}".format(name, year))

John - 1983
Jim - 1985
Lucy - 1995

zip(*some_list)

zip(*some_list) 方法可以实现元组列表的反向解压,只支持元组和列表,不支持 dict 直接解压。

zip(*some_list) 反向解压列表

l1 = [("John", 1995), ("Lucy", 2000), ("Max", 1985)]
name, year = zip(*l1)
print(name)
print(year)

输出结果:
('John', 'Lucy', 'Max')
(1995, 2000, 1985)

zip(*some_list) 反向解压列元组

l1 = (("John", 1995), ("Lucy", 2000), ("Max", 1985))
name, year = zip(*l1)
print(name)
print(year)

输出结果:
('John', 'Lucy', 'Max')
(1995, 2000, 1985)

zip(*some_list) 不支持直接反向解压列字典

ict1 ={'John': 1995, 'Lucy': 2000, 'Max': 1985} 
print(dict1)
name, year = zip(*dict2)
print(name)
print(year)
Traceback (most recent call last):
  File "/home/10261018@zte.intra/VScode/zip.py", line 107, in <module>
     name, year = zip(*dict1)
ValueError: too many values to unpack (expected 2)