更优雅的方式来构建和追加列表?

时间:2017-05-18 20:12:25

标签: python-3.5

我知道这是一个蹩脚的问题,但python新手在这里。我在下面提出它并且它有效,但我想知道是否有更有效的方法来做到这一点:

这里的目标是计算4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 .... n次

n = 5000
x = 1.0
list_1 = [] #make a list for denominator
list_2 = [] #make a list of fractions using list_1 as denominator
list_3 = [] #make a list change odd elements to negative

for i in range(n):
    list_1.append(float(x))
    x = x + 2
for i in range(len(list_1)):
    list_2.append(4/list_1[i])
for count, i in enumerate(list_2):
    if count % 2 == 0:
        list_3.append(i)
    else:
        list_3.append(i * -1)
sum(list_3)

2 个答案:

答案 0 :(得分:3)

这将是你的任务的单线:

s = sum((-1)**i * 4 / (2*i+1) for i in range(n))

它会更高效,因为没有创建列表(永远不会调用.append);它只是对所有元素的生成器进行求和。

如果你真的需要你的元素列表(而不仅仅是总和),你可以用类似的方式构建它:

lst = list((-1)**i * 4 / (2*i+1) for i in range(n))

答案 1 :(得分:0)

您可以尝试使用以下功能执行此类操作:

def calc4DivX(n):
    signal = 1
    list_values = []
    for k in range(n):
        if signal == 1:
            list_values.append(4/n)
        else:
             list_values.append(-4/n)
        signal = signal*-1 # signal keeps alternating for every iteraction
     return sum(list_values)
#Call the function
print(calc4DivX(value))