我知道这是一个蹩脚的问题,但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)
答案 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))