【问题标题】:How do I sum the first value in a set of lists within a tuple?如何对元组内的一组列表中的第一个值求和?
【发布时间】:2011-06-07 11:23:50
【问题描述】:

嘿,我希望能够执行this,但要选择我总结的列表。比方说,同样的例子,但只将第 3 个和第 4 个列表中的第一个数字相加。

【问题讨论】:

  • 你真的不能让这个答案适应你的问题吗?目前还不清楚你到底想要什么。它总是一个连续的范围吗?有什么理由需要第三和第四吗?为什么不是第三和第五?
  • 这是因为我在元组中的每个列表都包含特定股票的日期和收盘价。要计算 30 天前的 SMA10,我需要元组位置 30 到 39 的收盘价之和。
  • 我的错,它们是字符串。我通过这样做让它工作。收盘价[30:39]: intclose = float(close[4]) sumclo += intclose

标签: python tuples


【解决方案1】:

类似:

sum(int(tuple_list[i][0]) for i in range(3,5))

range(x, y) 生成一个整数列表,从 x(included) 到 y(excluded) 和 1 作为 step。如果你想改变range(x, y, step) 会做同样的事情,但会逐步增加。

可以找到官方文档here

或者你可以这样做:

sum(float(close[4]) for close in tickers[30:40])

【讨论】:

  • 与其构造中间列表,不如通过省略大括号使用生成器表达式:sum(tuple_list[i][0] for i in range(3,5))
  • 感谢您的建议。已更正。
  • 这看起来应该可行,但我刚刚意识到我的价格是整数。我应该添加什么来转换它们?
  • 我不明白你在问什么,如果它们是整数,你应该没有问题来总结它们。
【解决方案2】:
>>> l1
[(0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 7), (6, 8), (7, 9), (8, 10), (9, 11)]
>>> sum([el[0] for (nr, el) in enumerate(l1) if nr in [3, 4]])
7
>>> 

【讨论】:

    【解决方案3】:

    如果您想限制每个元素的某些属性,您可以使用filter(),然后再将其提供给链接中发布的代码。这将使您可以根据需要编写一个独特的过滤器。这不适用于您提供的示例,但您似乎对一般情况更感兴趣。

    sum(pair[0] for pair in filter(PREDICATE_FUNCTION_OR_LAMBDA, list_of_pairs))
    

    【讨论】:

      【解决方案4】:

      还没有看到使用 reduce 的答案。

      reduce(lambda sumSoFar,(tuple0,tuple1): sumSoFar+tuple0, list, 0)

      本质上 sum 等同于reduce(int.__add__, list, 0)

      编辑:没有阅读谓词部分。

      很容易修复,但可能不再是最佳答案:

      predicate = lambda x: x == 2 or x == 4
      reduce(lambda sumSoFar,(t0,t1): sumSoFar+(t0 if predicate(t0) else 0), list, 0)
      

      【讨论】:

      • 我们可以停止在 Python 中使用 reduce 吗?混淆和较差的算法复杂性不是我们的目标。
      • 如果不考虑求和的条件部分,我不明白为什么 reduce 是一个糟糕的选择。它遍历一个列表,依次将给定函数应用于每个元素。说 reduce 是一个糟糕的选择,就像说 map 是一个将函数应用于列表中每个元素的糟糕选择一样。
      • 'reduce' 混淆了?试着告诉所有使用真正 FP 语言的人。 'reduce' 算法复杂度差?据我所知,它是 O(N)。
      猜你喜欢
      • 2010-10-12
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      相关资源
      最近更新 更多