zip函数的问题:看起来不可迭代的列表

时间:2014-12-03 17:57:40

标签: python list loops iteration

我在试图使用带有zip功能的四个列表时遇到了一些麻烦。 特别是,我在第36行遇到以下错误: TypeError: zip argument #3 must support iteration

我已经读过它不是可迭代的对象,但我在两个列表中使用它!如果我尝试仅在前2个列表上使用zip,它可以完美地工作:我只有最后两个问题。 有人有关于如何解决这个问题的想法?非常感谢!

import numpy
#setting initial values
R = 330
C = 0.1
f_T = 1/(2*numpy.pi*R*C)
w_T = 2*numpy.pi*f_T
n = 10
T = 1
w = (2*numpy.pi)/T
t = numpy.linspace(-2, 2, 100)

#making the lists c_k, w_k, a_k, phi_k
c_karray = []
w_karray = []
A_karray = []
phi_karray = []

#populating the lists
for k in range(1, n, 2):
    c_k = 2/(k*numpy.pi)
    w_k = k*w
    A_k = 1/(numpy.sqrt(1+(w_k)**2))
    phi_k = numpy.arctan(-w_k)
    c_karray.append(c_k)
    w_karray.append(w_k)
    A_karray.append(A_k)
    phi_karray.append(phi_k)

#making the function w(t)
w = []

#doing the sum for each t and populate w(t)
for i in t:
    w_i = ([(A_k*c_k*numpy.sin(w_k*i+phi_k)) for c_k, w_k, A_k, phi_k in zip(c_karray, w_karray, A_k, phi_k)])
    w.append(sum(w_i)

2 个答案:

答案 0 :(得分:0)

我相信你想要zip(c_karray, w_karray, A_karray, phi_karray)。另外,您应该生成一次,而不是for循环的每次迭代。

此外,您并未真正使用numpy。试试这个而不是你的循环。

d = numpy.arange(1, n, 2)
c_karray = 2/(d*numpy.pi)
w_karray = d*w
A_karray = 1/(numpy.sqrt(1+(w_karray)**2))
phi_karray = numpy.arctan(-w_karray)
w = (A_karray*c_karray*numpy.sin(w_karray*t[:,None]+phi_karray)).sum(axis=-1)

答案 1 :(得分:0)

您可能错误地输入了zip中的最后两个元素。它们应为A_karrayphi_karray,因为phi_kA_k是单个值。

w的结果是:

[-0.11741034896740517,
 -0.099189027720991918,
 -0.073206290274556718,
...
 -0.089754003567358978,
 -0.10828235682188027,
 -0.1174103489674052]

HTH,

德语。