挣扎于特定的 error.tuple 索引必须是整数,而不是浮点数

Struggling with a specific error.tuple indices must be integers, not float

我遇到了一个特定的错误

TypeError: list indices must be integers, not tuple

我看过一些以前的问题,但其中 none 确实解释了这个错误的含义。我知道它与创建 arrays/matrices 有关。 对此错误的简要描述将不胜感激。

这是我的一段代码

def Zed(K,M):
    if K == M:
        return Rk(K) + Rkp + 2*1j*W*10**(-7.0)*np.log(Dkkp/Ncheck(K))

    else: 
        return (Rk(K) + Rkp + 2*1j*W*10**(-7.0)*np.log(pythag(Conductors[K],Conductors[M],(Conductors[K+5]),((Conductors[M+5])-Dkkp))/Ncheck(K)))   

for K in range(5):
    for M in range(5):
        ZMatrix[[K],[M]] = Zed(Conductors[K],Conductors[M]) #this is where the error apears

它抛出了我上面提到的错误。我将 ZMatrix 定义为

ZMatrix = [[0 for x in range(5)] for x in range(5)]

这个:

ZMatrix[[K],[M]]

没有意义。您正在将两个列表 ([K],[M]) 的元组作为索引传递给列表 ZMatrix.

也许你的意思是:

ZMatrix[K][M]

更新:

当你有一个列表并想从中获取一个元素时,你可以在方括号内使用索引。

mylist[index]

本例中的索引应为整数:第一个元素为 0,第二个元素为 1,依此类推。

一个元组(通常)是由逗号分隔的多个项目,例如 (1,2)(True, 'banana', 4).

当你写作时:

ZMatrix[[K],[M]]

您正在向您的列表ZMatrix传递一个元组。元组是 ([K],[M]).

因此出现错误消息 "list indices must be integers, not tuple"。

但是,您可以这样做:

ZMatrix[K][M]

它的工作原理是 ZMatrix[K] 表示 ZMatrix 的元素 K。由于 ZMatrix 的定义方式,该元素本身是另一个列表。然后我们可以将列表 ZMatrix[K] 的元素 M 引用为 ZMatrix[K][M].

([K][M]) is a tuple. 

访问第 Kth 行中第 Mth 列元素的正确语法是

 ZMatrix[K][M]

并确保名称 'Conductors' 已定义。

首先要初始化你的 ZMatrix 我宁愿使用:

ZMatrix =  [[0] * 5 for i in range(5)]

编辑:我原来是用*二维重复生成的,按python FAQ: How do I create a multidimensional list的说明不行,只能是用于一维,您需要使用列表理解(或循环)来获取第二维。

其次,当取消引用列表的列表时,您需要将对不同列表的引用分开,ZMatrix[K][M],并且不要使用奇怪的元组引用,ZMatrix[[K],[M]]。所以将最后一行更改为:

ZMatrix[K][M] = Zed(Conductors[K], Conductors[M])

如果这不能解决您的所有问题,那么您可能需要查看 Zed() 函数中的公式构造。