我试图理解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(*)
的行为如何?你知道吗
这将返回一个包含四个子列表的列表。你知道吗
这将解压该列表,并将每个元素作为单独的参数传递给
zip()
。这就是*
解包操作符所做的:如果您使用包含四个元素的列表l
调用zip(*l)
,它将使用这四个参数调用zip()
。你知道吗将它与您编写的第一个代码段进行比较,它将
dict_list
中的四个列表作为单独的参数传递给zip
。你知道吗它们最终都会将完全相同的东西传递给
zip()
。当然,结果是一样的。你知道吗如果要将其与没有
*
的版本进行比较,请尝试:现在有区别了:
相关问题 更多 >
编程相关推荐