【问题标题】:Queue summation of something then show it in the end队列总和然后在最后显示
【发布时间】:2014-03-02 20:10:43
【问题描述】:

我正在尝试将一些数学表达式排队到 python 的某个地方,然后最后我想显示它们的总和。

我正在尝试做这样的事情:

for i in range(0, n-1): sum_queue(pow(-1,i)/((2*i)+1))
print(sum(0)) #or sum("latest")

有可能吗?

【问题讨论】:

  • 澄清一下,队列中只有一些数学表达式,对吧?
  • sum("latest") 是什么?不清楚问

标签: python math queue mathematical-expressions


【解决方案1】:
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> queue = []
>>> n = 10
>>> for i in range(0, n-1):
...     queue.append(pow(-1,i)/((2*i)+1))
... 
>>> queue
[1, -1, 0, -1, 0, -1, 0, -1, 0]
>>> sum(queue)
-3
>>> queue = [pow(-1,i)/((2*i)+1) for i in range(0, n-1)]
>>> sum(queue)
-3
>>> 

如果不需要临时列表,可以使用生成器:

>>> sum(pow(-1,i)/((2*i)+1) for i in range(0, n-1))
-3

【讨论】:

  • 不能缩短吗?
  • 你可以有一个计数器而不是对队列求和。
  • @AlejandroLucena 你能发布关于柜台的解决方案吗?
  • 好的,我马上贴出来
【解决方案2】:

在我对@warwaruk 的回答发表评论之后,可以将其缩短为使用计数器。尽管它违背了使用队列的目的,但由于这里唯一的操作是将值相加,因此不一定需要队列。

从技术上讲,如果您要对append() 之后的所有值执行任何类型的算术运算,则不需要队列

n = 10;
total = 0;
for i in range(0,n-1): 
  total += (pow(-1,i)/((2*i)+1));
print(total);

不是将值附加到队列然后sum()ing 它,而是在同一个 for 循环中一起完成。

如果你想看一下渐近分析,它们都是 O(n),但是这段代码更短,并且会为你节省一个函数调用和另一个 O(n) 操作。

希望这能回答你的问题:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多