Python 循环列表理解中的多变量

Python 循环列表理解中的多变量,python,for-loop,Python,For Loop,以下代码行的含义是什么 arr = [a+b for a,b in list] 通常,“for”循环与单个变量一起使用(在本例中为“i”) 在第一种情况下,for循环中使用了多个变量“a”和“b”,我无法理解这一点。请解释此格式。对于a,列表中的b将解构元组列表(或两个元素的列表)。也就是说,列表的形式应为[(a0,b0),(a1,b1),…] 因此,[a+b代表a,b在列表中]结果是[a0+b0,a1+b1,…] 列表的元素是两个元素的元组/列表 a,b in x 我们将每个元素分解为两

以下代码行的含义是什么

arr = [a+b for a,b in list]
通常,“for”循环与单个变量一起使用(在本例中为“i”)


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

对于a,列表中的b将解构元组列表(或两个元素的列表)。也就是说,
列表
的形式应为
[(a0,b0),(a1,b1),…]


因此,
[a+b代表a,b在列表中]
结果是
[a0+b0,a1+b1,…]

列表
的元素是两个元素的元组/列表

 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]

这就是所谓的元组解包。
列表
中的每个元素都应该是一个元组或其他可以解包的等效序列类型

例如:

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

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

这叫做拆包。如果列表(或任何其他iterable)包含两个元素iterable,则可以对它们进行解包,以便将单个元素作为
a
b
进行访问

例如,如果
list
定义为

list = [(1, 2), (3, 4), (4, 6)]
你的最终结果是

arr = [3, 7, 10]
您可以根据需要将任意多的元素解包成任意多的变量。唯一需要注意的是,列表中的所有元素必须具有相同的长度才能工作(因为您指定了要提前解包的变量数量)

这种结构的一个更常见的用法(可能是我见过的最常见的用法)是使用
enumerate
,它返回一个带有索引的元组以及iterable中的项。比如:

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

与变量解包比较<代码>a,b=x@Jollywatt对不起,我没听清楚你的话<只要
x
有两个元素,code>a,b=x就可以工作。我建议您提到,这都是变量解包的一个示例,这是基本概念。只是为了让OP认识到
a,b在x
a,b=x
之间的关系:)两个元素的任意可数。
arr = [ind + item for ind, item in enumerate(numbers)]