将循环中的输出分配给单个列表或数组 - python

我仍然可以在Python中找到自己的方式,所以这个问题可能非常基本:
我试图在python中生成一些余弦波,然后对其进行傅立叶变换。我写了以下代码:

from pylab import *
from numpy import *
x = linspace(-5,5,100)
t = linspace(0,2000,2001)
w1=cos(2*pi*3*t/2001)
w2=cos(2*pi*10*t/2001)
fourier=0
long(fourier)

Trace = w1+w2
for i in range(1,125,1):
    fourier[i] = sum(cos(2*pi*i*t/2001)*Trace)

print fourier
f=linspace(1,125,125)
plot(f,fourier)
show()

因此,我不想做成一个频率一个频率的值,而是想做一个循环,使每个频率从1到125,并将输出存储在一个列表中,以便我可以绘制它们。

Python不喜欢这样,并给出一条消息:

fourier[i] = sum(cos(2*pi*i*t/2001)*Trace)
TypeError: 'int' object does not support item assignment

知道为什么吗?

python大神给出的解决方案

可能是您想要的:

fourier = []

您将其清除为整数,则需要将其清除为列表。

您的Fourior类型是整数,您需要将其作为列表,以便它可以支持索引分配

还从您的代码中删除long(fourier)

for i in range(1,126):
    fourier[i] = sum(cos(2*pi*i*t/2001)*Trace)

这将使您的索引超出索引错误

正确的是:

for i in range(1,126):    # you dont need last option as 1, because range step is one by default
    fourier.append(sum(cos(2*pi*i*t/2001)*Trace))
 OR
    fourier.insert(i,sum(cos(2*pi*i*t/2001)*Trace))

使用列表理解更好,并且您需要将范围设置为126以匹配f的尺寸以进行绘制:

fourier = [sum(cos(2*pi*i*t/2001)*Trace) for i in range(1,126)]