【发布时间】:2019-08-04 11:47:39
【问题描述】:
我试图了解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(*) 似乎将所有具有共享索引的元素放在同一个元组中。这与第一个代码没有太大区别,我在 for 循环中使用了zip(),其中传入了dict键并带有相应的循环变量
zip() 和 zip(*) 在这种情况下表现如何?
【问题讨论】:
-
func(*lst)与func(lst[0], lst[1] ... , lst[-1])相同 -
你刚刚写了两种不同的方法来做同样的事情。投票结束,因为不清楚你在问什么。
-
zip(*)在真正的 zip 操作之前进行解包,而zip()是直接 zip。 -
@wim 不知何故,当我期望它们表现不同时,我在使用
zip()和zip(*)时遇到了相同的结果。而且我想知道导致相同结果的机制是什么,而它们应该是相反的。
标签: python