我无法理解元组中的这段代码

I'm not able to understand this code in tuple

init_tuple = [(0, 1), (1, 2), (2, 3)]

result = sum(n for _, n in init_tuple)

print(result)

这段代码的输出是 6。有人可以解释一下它是如何工作的吗?

您的代码提取每个元组并对第二个位置(即 [1])中的所有值求和。

如果循环重写,可能更容易理解:

init_tuple = [(0, 1), (1, 2), (2, 3)]
result = 0
for (val1, val2) in init_tuple:
    result = result + val2

print(result)

表达式(n for _, n in init_tuple)是一个生成器表达式。您可以迭代这样的表达式以获取它生成的所有值。在那种情况下,它读作:生成 init_tuple.

的每个元组的第二个组件

(_注意:这里的_代表元组的第一个组成部分。在python中很常见,当你不关心时使用这个名字它引用的变量(即,如果你不打算使用它)就像这里的情况一样。另一种编写生成器的方法是 (tup[1] for tup in init_tuple))

您可以使用 for 循环遍历生成器表达式。例如:

>>> for x in (n for _, n in init_tuple):
>>>   print(x)
1
2
3

当然,由于您可以迭代生成器表达式,因此您可以像在代码中所做的那样对其求和。

为了更好地理解,请先看看这个。

init_tuple = [(0, 1), (1, 2), (2, 3)]
sum = 0
for x,y in init_tuple:
     sum = sum + y
print(sum)

现在,你可以看到上面的代码所做的是它计算元组的第二个元素的总和,它等同于你的代码,因为两者做同样的工作。

for x,y in init_tuple:

x 保存元组的第一个值,y 保存元组的第二个值,在第一次迭代中:

x = 0, y = 1,

然后在第二次迭代中:

x = 1, y = 2 等等。 在您的情况下,您不需要元组的第一个元素,因此您只需使用 _ 而不是使用 variable.