### 'list' object is not callable in list comprehension

601 观看

4回复

20 作者的声誉

I was building this code and built this first part that outputted the plot that I wanted, then I wen to work on the 2nd half of the portion of the plot and maybe after 10 or so runs my first half of my code stops working. I didn't mean to do anything but now I can't get it back and I get the error `'list' object is not callable'` for my `for` loop. It says this error although I am using an array. I have tried different syntax with the list comprehension as well as making the array a set, list, and string. Not really sure what to do so any help or things to try would be helpful.

``````import numpy as np
import pylab as plt

#Before the explosion
t1 = np.asarray(range(0, 5))
t2 = np.linspace(0, 4 , 1)
g = 1.0
vx = 4.0
vy = 4.0

def x1 (t):
return (vx*t)

def y1 (t):
return(vy*t -(0.5*g*(t**2.0)))

x1 = [x1(t) for t in t1]
y1 = [y1(t) for t in t1]

x2 = [x1(t) for t in t2]
y2 = [y1(t) for t in t2]

#after the explosion

'''
t3 = range(5,10)
t4 = np.linspace(5, 9 , 1000)

vx = 5
vy = 3

def x2 (t):
return (16+vx)

def y2 (t):
return(vy*t -(0.5*g*(t**2)))

'''
plt.scatter(x1,y1, color='blue',marker='+',s=100.0,  label = '')
plt.plot(x2,y2, color='red',marker=None,  label = '')

plt.show()
``````

Output:

``````     20 y1 = [y1(t) for t in t1]
21
---> 22 x2 = [x1(t) for t in t2]
23 y2 = [y1(t) for t in t2]
24

TypeError: 'list' object is not callable
``````

### 回应 4

0

880 作者的声誉

i think you should use square brackets . i mean `x1[t]`

0

23085 作者的声誉

Parenthesis are used to call objects (if they are callable); for subscripting, you must use square brackets:

replace:

``````y1 = [y1(t) for t in t1]
``````

with

``````y1 = [y1[t] for t in t1]
``````

2

0 作者的声誉

It seems you want to call the function defined to get the values for x2. Try changing the name of the functions in the definition (or change the name of the variables x1 and y1) .

``````def xfunc(t):
return (vx*t)
def yfunc(t):
return(vy*t -(0.5*g*(t**2.0)))

x1 = [xfunc(t) for t in t1]
y1 = [yfunc(t) for t in t1]

x2 = [xfunc(t) for t in t2]
y2 = [yfunc(t) for t in t2]
``````

0

729 作者的声誉

At the line of `x1 = [x1(t) for t in t1]` you bound `x1` to a `list`, which was a function as you defined at `def x1 (t):`. Then you tried to call `x1` again at `x2 = [x1(t) for t in t2]`. This means you're passing a variable to a `list`. Maybe you want to rename your function `x1` and `y1` to other names.