Python zip 函数

zip 函数接受零个或多个可迭代对象,并返回一个迭代器元组。在本节中,我们将讨论如何使用这个 Python zip 函数来组合可迭代项,并通过示例解压它们。

在此函数中,迭代器对象可以是列表、元组、字符串等,也可以使用用户定义的迭代器。zip 函数的语法如下所示。

zip(*iterables)

Python zip 两个列表的简单示例

这是一个演示 zip 函数的简单示例。它组合了 list1 和 list2 中的项。

li1 = [1, 2, 3, 4, 5]
li2 = ['a', 'b', 'c', 'd', 'e']
 
res = zip(li1, li2)
 
print(res)

上面的代码打印了对象。要显示结果,请使用 for 循环或任何可迭代对象。

<zip object at 0x109c7b448>

对两个列表使用 zip 函数

我们使用 for 循环迭代两个列表的结果并显示输出。请参阅 Python 文章中的列表

lt1 = [1, 2, 3, 4, 5]
lt2 = ['a', 'b', 'c', 'd', 'e']
 
result = zip(lt1, lt2)
 
for x, y in result:
    print(x, y)

使用 for 循环迭代两个输出

1 a
2 b
3 c
4 d
5 e

Python zip 多个列表示例

在这里,我们使用它对三个列表执行操作。在第二个 for 循环中,我们稍微改变了for 循环,使其与第一个循环不同,以查看元组格式的实际值。

i = [1, 2, 3, 4, 5]
j = ['a', 'b', 'c', 'd', 'e']
k = ['Sunday', 'Monday', 'Tuesday', 'Thursday', 'Friday']
 
result = zip(i, j, k)
 
for x, y, z in result:
    print(x, y, z)
 
for val in result:
    print(val)

适用于多个可迭代对象并使用 for 循环进行迭代

1 a Sunday
2 b Monday
3 c Tuesday
4 d Thursday
5 e Friday

(1, 'a', 'Sunday')
(2, 'b', 'Monday')
(3, 'c', 'Tuesday')
(4, 'd', 'Thursday')
(5, 'e', 'Friday')

元组示例

到目前为止,我们已将此 zip 函数用于单个可迭代元组。在这里,我们将其用于多个元组。

tp1 = (1, 2, 3, 4, 5)
tp2 = ('a', 'b', 'c', 'd', 'e')
tp3 = ('Sunday', 'Monday', 'Tuesday', 'Thursday', 'Friday')
 
result = zip(tp1, tp2, tp3)
 
for val in result:
    print(val)
(1, 'a', 'Sunday')
(2, 'b', 'Monday')
(3, 'c', 'Tuesday')
(4, 'd', 'Thursday')
(5, 'e', 'Friday')

Python zip 列表和元组示例

您还可以将其用于多个可迭代对象的组合。在此示例中,我们将其用于两个列表和一个元组。

ltA = [1, 2, 3, 4, 5]
ltB = ['a', 'b', 'c', 'd', 'e']
tp1 = ('Sunday', 'Monday', 'Tuesday', 'Thursday', 'Friday')
 
result = zip(ltA, ltB, tp1)
 
for val in result:
    print(val)
(1, 'a', 'Sunday')
(2, 'b', 'Monday')
(3, 'c', 'Tuesday')
(4, 'd', 'Thursday')
(5, 'e', 'Friday')

对不均匀项使用 zip 函数

到目前为止,我们在列表、元组或任何可迭代对象中使用了相同数量的项。让我向您展示如果在 zip 可迭代对象中使用不同数量的项会发生什么。为此,我们使用了 4 个项。

lst1 = [1, 2, 3, 4, 5]
lst2 = ['a', 'b', 'c', 'd']
tpl1 = ('Sunday', 'Monday', 'Tuesday', 'Thursday', 'Friday')
 
res = zip(lst1, lst2, tpl1)
 
for val in res:
    print(val)

此函数仅从每个可迭代对象返回了 4 个项。

(1, 'a', 'Sunday')
(2, 'b', 'Monday')
(3, 'c', 'Tuesday')
(4, 'd', 'Thursday')

转换 zip 列表

在我们之前的所有示例中,我们都使用 for 循环来显示对象中的项。但是,您可以将对象转换为任何可迭代对象。在此示例中,我们使用 list() 函数转换结果。

lt1 = [1, 2, 3, 4]
lt2 = ['a', 'b', 'c', 'd']
lt3 = ['Sunday', 'Monday', 'Tues', 'Friday']
 
res = zip(lt1, lt2, lt3)
print(list(res))
 
print('\nDirectly inside')
print(list(zip(lt1, lt2, lt3)))

转换结果

[(1, 'a', 'Sunday'), (2, 'b', 'Monday'), (3, 'c', 'Tues'), (4, 'd', 'Friday')]

Directly inside
[(1, 'a', 'Sunday'), (2, 'b', 'Monday'), (3, 'c', 'Tues'), (4, 'd', 'Friday')]

转换 Python zip 字典和集合

我们使用 set() 函数和 dict() 函数将对象转换为集合字典

Python zip Function Example

zip 列表推导示例

此示例展示了如何在列表推导中使用此函数。

在此函数在列表推导示例中,第二个通过组合 x、y、z 中的项来显示元组。

x = [10, 20, 30, 40, 50]
y = ['a', 'b', 'c', 'd', 'e']
z = ['Sunday', 'Monday', 'Tuesday', 'Thursday', 'Friday']
 
[print(x, y, z) for x, y, z in zip(x, y, z)]

[print(values) for values in zip(x, y, z)]

在列表推导输出中使用此方法创建元组

10 a Sunday
20 b Monday
30 c Tuesday
40 d Thursday
50 e Friday

(10, 'a', 'Sunday')
(20, 'b', 'Monday')
(30, 'c', 'Tuesday')
(40, 'd', 'Thursday')
(50, 'e', 'Friday')

Python 解压示例

我们还可以使用此 Python zip 函数解压其中的项。首先,我们声明了三个对象。接下来,我们使用它来组合两个对象并进行转换。接下来,x, y = (*result) 语句将第一组值分配给 a,将第二组值分配给 b。

lt1 = [10, 20, 30, 40]
lt2 = ['a', 'b', 'c', 'd']
lt3 = ['Sunday', 'Monday', 'Thursday', 'Friday']
 
result = list(zip(lt1, lt3))
print(result)
 
a, b = zip(*result)
print('Values in a = ', a)
print('Values in b = ', b)
[(10, 'Sunday'), (20, 'Monday'), (30, 'Thursday'), (40, 'Friday')]
Values in x = (10, 20, 30, 40)
Values in y = ('Sunday', 'Monday', 'Thursday', 'Friday')

Python 解压示例 2

这次我们使用了三个项并执行了操作。

i = [10, 20, 30, 40]
j = ['a', 'b', 'c', 'd']
k = ['Sunday', 'Monday', 'Thursday', 'Friday']
 
result = list(zip(i, j, k))
print(result)
 
x, y, z = zip(*result)
print('Values in x = ', x)
print('Values in y = ', y)
print('Values in z = ', z)

将结果分配给多个变量输出。

[(10, 'a', 'Sunday'), (20, 'b', 'Monday'), (30, 'c', 'Thursday'), (40, 'd', 'Friday')]
Values in x = (10, 20, 30, 40)
Values in y = ('a', 'b', 'c', 'd')
Values in z = ('Sunday', 'Monday', 'Thursday', 'Friday')

我们不将结果转换为列表,而是将结果用作函数源。为此,只需从上面的示例中删除该词。