【问题标题】:I'm not able to understand this code in tuple我无法理解元组中的这段代码
【发布时间】:2021-10-19 12:39:23
【问题描述】:
init_tuple = [(0, 1), (1, 2), (2, 3)]

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

print(result)

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

【问题讨论】:

  • 您将每个元组解压缩到变量 _n 中,然后对第二个进行求和。看看这会产生什么可能会有所帮助:[n for _, n in init_tuple]

标签: python list tuples logic init


【解决方案1】:

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

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

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

print(result)

【讨论】:

    【解决方案2】:

    表达式(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
    

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

    【讨论】:

      【解决方案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 以此类推。 在您的情况下,您不需要元组的第一个元素,因此您只需使用 _ 而不是使用变量。

      【讨论】:

        猜你喜欢
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 2020-12-13
        相关资源
        最近更新 更多