[英]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.