0

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

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

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

可能吗?

4

2 回答 2

1

在我对@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) 操作。

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

于 2014-03-02T12:01:46.517 回答
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
于 2014-03-02T11:37:03.860 回答