gpt4 book ai didi

python - zip() 和 zip(*) 似乎给出了相似的结果

转载 作者:行者123 更新时间:2023-12-01 01:07:58 25 4
gpt4 key购买 nike

我试图理解 zip() 之间的区别和zip(*) .

据我了解,zip()可用于组合两个列表,以便具有共享索引的元素在一起。例如这些例子:

dict_list = {'First Name': ['Tom', 'Ann', 'Ben'],
'Last Name': ['Haverford', 'Perkins', 'Wyatt'],
'Age': [33, 42, 44],
'Occupation': ['Administrator', 'Nurse', 'Auditor']}

for first_name, last_name, age, occupation in zip(dict_list['First Name'], dict_list['Last Name'], dict_list['Age'], dict_list['Occupation']):
print(first_name, last_name, age, occupation)

#result

Tom Haverford 33 Administrator
Ann Perkins 42 Nurse
Ben Wyatt 44 Auditor

那么为什么在我看来,有时 zip(*) 会有这样的行为呢?例如:

for t in (zip(*dict_list.values())):
print(t)
#result

('Tom', 'Haverford', 33, 'Administrator')
('Ann', 'Perkins', 42, 'Nurse')
('Ben', 'Wyatt', 44, 'Auditor')

自从我的dict_list.values()是列表,看起来像 zip(*)将具有共享索引的所有元素放在同一个元组中。这与我使用 zip() 的第一个代码没有太大区别。在 for循环传入字典键和相应的循环变量

怎么样zip()zip(*)在这种情况下表现如何?

最佳答案

>>> dict_list.values()
[['Tom', 'Ann', 'Ben'], ['Haverford', 'Perkins', 'Wyatt'], [33, 42, 44], ['Administrator', 'Nurse', 'Auditor']]

这将返回一个包含四个子列表的列表。

zip(*dict_list.values())

这将解压该列表并将每个元素作为单独的参数传递给 zip()。这就是 * 解包运算符的作用:如果您使用包含四个元素的列表 l 调用 zip(*l),它会调用 zip() 带有这四个参数。

将其与您编写的第一个代码段进行比较,该代码段将 dict_list 内的四个列表作为单独的参数传递给 zip

zip(dict_list['First Name'], dict_list['Last Name'], dict_list['Age'], dict_list['Occupation'])

它们最终都将完全相同的东西传递给 zip()。当然,结果是一样的。

<小时/>

如果您想将其与没有 * 的版本进行比较,请尝试:

zip(dict_list.values())

现在有一个区别:

>>> zip(*dict_list.values())
[('Haverford', 'Tom', 33, 'Administrator'), ('Perkins', 'Ann', 42, 'Nurse'), ('Wyatt', 'Ben', 44, 'Auditor')]
>>> zip(dict_list.values())
[(['Haverford', 'Perkins', 'Wyatt'],), (['Tom', 'Ann', 'Ben'],), ([33, 42, 44],), (['Administrator', 'Nurse', 'Auditor'],)]

关于python - zip() 和 zip(*) 似乎给出了相似的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55148010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com