Python TypeError:无法解压缩不可编辑的int对象。当我试图参加x的len时,它给了我一个错误消息,消息说它是float,现在它是int?

Python TypeError:无法解压缩不可编辑的int对象。当我试图参加x的len时,它给了我一个错误消息,消息说它是float,现在它是int?,python,python-3.x,error-handling,Python,Python 3.x,Error Handling,我创建了一个函数来计算每两个地方的距离。x和y是位置x和y的列表 def calculate_distances(x,y): N=len(str(x)) a=[[0]*N]*N for i,j in range(N): a[i][j]=np.sqrt((x[i]-x[j])**2+(y[i]-y[j])**2) return a 我将其应用于讲师提供的一个部分 D = calculate_distances(x,y) fig = plt.fig

我创建了一个函数来计算每两个地方的距离。x和y是位置x和y的列表

def calculate_distances(x,y):
    N=len(str(x))
    a=[[0]*N]*N
    for i,j in range(N):
        a[i][j]=np.sqrt((x[i]-x[j])**2+(y[i]-y[j])**2)
    return a
我将其应用于讲师提供的一个部分

D = calculate_distances(x,y)

fig = plt.figure(figsize=(6,6));
total_distance = 0
for i in range(n_city-1):
    plt.scatter(x,y,marker="s",c="k");
    plt.plot([x[i],x[i+1]], [y[i],y[i+1]],
             alpha=(i+1)/(n_city),lw=2,color="k");
    total_distance += D[i,i+1]
    plt.title("Distance traveled = %0.3f" %total_distance)
    time.sleep(1.0)  
    clear_output(wait = True)
    display(fig) # Reset display
我收到了错误消息,我贴在下面

TypeError                                 Traceback (most recent call last)
<ipython-input-21-3804c182182f> in <module>
      3 # We use the calculate_distances function you created above to compute the distance matrix
      4 # Make sure you feed in the correct "x" and "y" arrays if you used different variables names
----> 5 D = calculate_distances(x,y)
      6 
      7 fig = plt.figure(figsize=(6,6));

<ipython-input-20-ecc344ee386f> in calculate_distances(x, y)
      3     N=len(str(x))
      4     a=[[0]*N]*N
----> 5     for i,j in range(N):
      6         a[i][j]=np.sqrt((x[i]-x[j])**2+(y[i]-y[j])**2)
      7     return a

TypeError: cannot unpack non-iterable int object```
TypeError回溯(最近一次调用)
在里面
3 35;我们使用上面创建的计算距离函数来计算距离矩阵
4#如果使用不同的变量名称,请确保输入正确的“x”和“y”数组
---->5d=计算_距离(x,y)
6.
图7=plt.图(figsize=(6,6));
在计算_距离时(x,y)
3 N=len(str(x))
4 a=[[0]*N]*N
---->对于范围(N)内的i,j为5:
6a[i][j]=np.sqrt((x[i]-x[j])**2+(y[i]-y[j])**2)
7返回a
TypeError:无法解压缩不可编辑的int对象```
范围(N)
仅返回一个索引序列。如果要在行和列上迭代,可以使用嵌套循环

len(str(x))
应该是
len(x)
,因为
x
y
应该是坐标列表

初始化
a
时,需要使用列表理解,而不是将
[0]*N
乘以
N
。后者将使所有行引用同一个列表

def calculate_distances(x,y):
    N=len(x)
    a=[[0]*N for _ in range(N)]
    for i in range(N):
        for j in range(N):
            a[i][j]=np.sqrt((x[i]-x[j])**2+(y[i]-y[j])**2)
    return a

对于范围(N)内的i,j,您希望
做什么:
range(N)
一次只返回一个数字,不能将其分配给两个变量。
a=[[0]*N]*N
也是错误的。请看您需要嵌套循环:
对于范围(N)中的i:对于范围(N)中的j:…
如果
x
是位置列表,为什么要使用
len(str(x))
而不是
len(x)
?我不知道x是什么,但是,如果我使用len(x),它会给我一个错误消息,告诉我不能在float上使用len。