[英]multiple variable in for loop list comprehension
以下代碼行的含義是什么?
arr = [a+b for a,b in list]
通常,'for'循環與單個變量一起使用(在本例中為'i')
arr = [i for i in list]
在第一種情況下,在for循環中使用多個變量'a'和'b',我無法理解。 請解釋這種格式。
for a,b in list
解構一個元組列表(或兩個元素的列表)。 也就是說,預期list
的形式為[(a0, b0), (a1, b1), ...]
。
因此, [a+b for a,b in list]
導致[a0+b0, a1+b1, ...]
。
list
的元素是帶有2個元素的元組/列表,當我們寫時,
a,b in x
我們將每個元素解包為兩個不同的變量a
和b
>>> a,b = [1, 2]
>>> a
1
>>> b
2
例
>>> x = [ (i, i*i) for i in range(5) ]
>>> x
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]
>>> [ a+b for a,b in x ]
[0, 2, 6, 12, 20]
發生了什么叫做元組解包。 list
每個元素應該是元組或其他可以解包的等效序列類型。
例:
l = [(1, 2), (3, 4)]
arr = [a + b for a, b in l]
print(arr)
輸出:
[3, 7] # [(1+2), (3+4)]
這稱為拆包。 如果列表(或任何其他可迭代的)包含兩個元素的可迭代,則可以將它們解壓縮,以便可以將各個元素作為a
和b
進行訪問。
例如,如果list
定義為
list = [(1, 2), (3, 4), (4, 6)]
你的最終結果是
arr = [3, 7, 10]
您可以根據需要將所需數量的元素解壓縮到所需的變量中。 唯一的問題是列表中的所有元素必須具有相同的長度才能工作(因為您指定了要預先解壓縮的變量數)。
這種結構的一個更常見的用法(可能是我見過的最常見的)是enumerate
,它返回一個帶有索引的元組以及一個可迭代的項。 就像是:
arr = [ind + item for ind, item in enumerate(numbers)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.