以下代码行的含义是什么?
arr = [a+b for a,b in list]
通常,'for'循环与单个变量一起使用(在本例中为'i')
arr = [i for i in list]
在第一种情况下,在for循环中使用了多个变量'a'和'b',我无法理解。请解释这种格式。
答案 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
我们将每个元素解包为两个不同的变量,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]
答案 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)
这称为解包。如果列表(或任何其他可迭代的)包含两个元素的可迭代,则可以将它们解压缩,以便可以a
和b
访问各个元素。
例如,如果list
被定义为
list = [(1, 2), (3, 4), (4, 6)]
你的最终结果将是
arr = [3, 7, 10]
您可以根据需要将所需数量的元素解压缩到所需数量的变量中。唯一的问题是列表中的所有元素必须具有相同的长度才能生效(因为您指定了要预先解压缩的变量数量)。
这种结构的一个更常见的用法(可能是我见过的最常见的)是enumerate
,它返回一个带有索引的元组以及一个可迭代的项。类似的东西:
arr = [ind + item for ind, item in enumerate(numbers)]