for循环列表理解中的多个变量

时间:2017-01-12 06:39:20

标签: python for-loop

以下代码行的含义是什么?

arr = [a+b for a,b in list]

通常,'for'循环与单个变量一起使用(在本例中为'i')

arr = [i for i in list] 

在第一种情况下,在for循环中使用了多个变量'a'和'b',我无法理解。请解释这种格式。

4 个答案:

答案 0 :(得分:3)

for a,b in list解构一个元组列表(或两个元素的列表)。也就是说,list的格式应为[(a0, b0), (a1, b1), ...]

因此,[a+b for a,b in list]会产生[a0+b0, a1+b1, ...]

答案 1 :(得分:3)

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]

答案 2 :(得分:2)

正在进行的事情称为元组解包。 list中的每个元素都应该是元组或其他可以解包的等效序列类型。

示例:

l = [(1, 2), (3, 4)]
arr = [a + b  for a, b in l]
print(arr)

输出:

[3, 7]    # [(1+2), (3+4)]

答案 3 :(得分:2)

这称为解包。如果列表(或任何其他可迭代的)包含两个元素的可迭代,则可以将它们解压缩,以便可以ab访问各个元素。

例如,如果list被定义为

list = [(1, 2), (3, 4), (4, 6)]

你的最终结果将是

arr = [3, 7, 10]

您可以根据需要将所需数量的元素解压缩到所需数量的变量中。唯一的问题是列表中的所有元素必须具有相同的长度才能生效(因为您指定了要预先解压缩的变量数量)。

这种结构的一个更常见的用法(可能是我见过的最常见的)是enumerate,它返回一个带有索引的元组以及一个可迭代的项。类似的东西:

arr = [ind + item for ind, item in enumerate(numbers)]