python - 列表中的 x, *y 在 python 中是什么意思

标签 python list

我最近遇到了一段 python 代码,看起来像这样

groups = {}
    for d, *v in dishes:
        for x in v:
            groups.setdefault(x, []).append(d)

dishes 代表一个二维数组。 第一个 for 循环语句是什么意思? *v 是什么? v 前面的星号表示什么? 还有哪些情况是变量前加星号?

最佳答案

它本质上是元组/列表拆包和*args 可迭代拆包的组合。在 for 循环的每次迭代中,每个可迭代对象都会被解包。

首先让我们看一个简单的元组/列表拆包:

>>> x, y = (1, 2)
>>> x
1
>>> y
2

# And now in the context of a loop:
>>> for x, y in [(1, 2), (3, 4)]:
>>>     print(f'x={x}, y={y}')
"x=1, y=2"
"x=3, y=4"

现在考虑以下内容(想象一下循环中的相同概念,如上所示):

>>> x, y = (1, 2, 3)
ValueError: too many values to unpack (expected 2)

>>> x, *y = 1, 2, 3
>>> x
1 
>>> y 
[2, 3]

请注意 * 如何允许 y 消耗所有剩余参数。

这类似于您在函数中使用 * 的方式 - 它允许未指定数量的参数并消耗所有参数。 您可以查看更多 (*args) 用法示例 here .

>>> def foo(x, *args):
>>>     print(x)
>>>     print(args)

>>>foo(1, 2, 3, 4)
1
[2, 3, 4]

至于实际例子,这里有一个简单的例子:

>>> names = ("Jack", "Johnson", "Senior")
>>> fist_name, *surnames =  names
>>> print(surnames)
["Johnson", "Senior"]

关于python - 列表中的 x, *y 在 python 中是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814195/

相关文章:

python - 如何将列表项附加到数据框中的特定列?

Python 切片数组以进行多线程并按顺序重新组装结果?

python - 从奇数/偶数 Python 列表中删除偶数/奇数

java - Java 参数化列表中的类型转换

python - 在 python 3.6 上工作但在 3.7.3 上不工作的方法的内存

java - JUnit 中的实例变量

css - 编辑我主页上最受欢迎元素的显示

python - 使用 boolean 数组调用 iloc()

python - pandas:将DataFrame最后一行除以第一行

python - 多级数据框到破折号表