挣扎于特定的 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()
函数中的公式构造。
我遇到了一个特定的错误
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()
函数中的公式构造。