簡體   English   中英

列表中的 x, *y 在 python 中意味着什么

[英]What does for x, *y in list mean in python

我最近遇到了一段看起來像這樣的python代碼

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

菜代表一個二維數組。 第一個 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 並且將它們全部消耗掉。 您可以在此處查看更多(*args)用法示例。

>>> 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
>>> prin(surnames)
["Johnson", "Senior"]

基本上 * 表示 n 個無數元素。

例子 :

x=1,2,4,6,9,8
print(type(x))
print(x)

輸出:

<class 'tuple'>
(1, 2, 4, 6, 9, 8)
y,*x=1,2,4,6,9,8
print(type(x))
print(x)

輸出:

<class 'list'>
[2, 4, 6, 9, 8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM