Python - zip函数中的星号(*)用法

3

我是一个Python的新手,我不明白为什么下面的代码不起作用:

ea = zip([[200, 1], [10, 1]])

由于我正在获取

[([200, 1],), ([10, 1],)]

当我需要添加一个星号时

ea = zip(*[[200, 1], [10, 1]])

为了获得我想要的结果,即:
[(200, 10), (1, 1)]

我之前认为 * 是用来将列表转换为元组的,但是我哪里错了吗?

2个回答

8
如果您有时间,可以阅读这篇帖子,它是理解Python中*的工作原理的好资源。
在Python中,星号会为函数调用解包参数,请参考这里
z = [4, 5, 6]
f(*z)

将与以下相同:

f(4,5,6)

在字典中,**的作用类似于列表中的*

3

zip 希望有多个参数,就像这样:

>>> zip([200, 1], [10, 1])
[(200, 10), (1, 1)]

如果您只想使用一个参数,那么请使用*,因为它会将其分解为多个参数:
>>> zip(*[[200, 1], [10, 1]])
[(200, 10), (1, 1)]
>>> 
< p > * 不会将列表转换为元组。它会解包列表(文档)。< /p >

谢谢,那 Asterisk 的行为和这里阅读到的 Python 参数的双星号和星号是一样的吗:https://dev59.com/HHVD5IYBdhLWcg3wQZUg ?? - Dean
那个问题谈论的是使用***来定义函数。你的问题是关于使用现有函数。因此,它类似但并不相同。 - John1024

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接