簡體   English   中英

for循環列表理解中的多個變量

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

我們將每個元素解包為兩個不同的變量ab

>>> 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)]

這稱為拆包。 如果列表(或任何其他可迭代的)包含兩個元素的可迭代,則可以將它們解壓縮,以便可以將各個元素作為ab進行訪問。

例如,如果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.

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