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