循环遍历 2d 数组,错误类型错误:'int'对象不可下标



我需要用y 2d数组循环,但它给了我错误,它告诉我:追踪(最近一次通话(:文件"plot.py",第18行,iny[k][j]=y[k][j]+1TypeError:"int"对象不是可下标的

import matplotlib.pyplot as plt
import math
import numpy as np
jo =[20,30,40,50,60,70]
for k in jo:
x=[]
mo = str(k)
migo = "".join(["./",mo,"/result_no"])
with open(migo) as f:
for line in f:
x.append(float(line))
y = [jo][0]*120
#   print(y) 
for i in range(len(x)):
j = int(x[i])
y[k][j] = y[k][j]+1
b = [0]*120
for i in range(len(y[k])):
if (k==10):
if (y[k][i]!=0):
b[i] = - math.log( y[k][i] )
if (k!=10):
if (y[k][i]!=0):
b[i] = -math.log( y[k][i] )-0.01*(i-k)*(i-k)
alp = b[:]
for i in range(len(alp)):
if (alp[i]==0): 
b.remove(0) 
plt.show()
#fy = plt.plot(y)
ft = plt.plot(b)
plt.show()

如果运行

jo = [20,30,40,50,60,70]                                                        
y = [jo][0]*120                                                                 
print(y)

您将看到y是一个包含720个元素的一维列表,即120 * len(jo)。这是因为在y = [jo][0]*120行中,您创建了一个嵌套列表[[20, 30, 40, 50, 60, 70]],然后取该列表的第一个元素[20, 30, 40, 50, 60, 70](或jo(,并将其重复120次。

由于您正在寻找一个由120行、len(jo)列组成的数组,因此可以创建以下内容:

y = [[0] * len(jo)] * 120

要根据代码示例访问元素,您需要修改for循环,以获得jo中元素的索引,即:

for idx, k in enumerate(jo):
x=[]
mo = str(k)
migo = "".join(["./",mo,"/result_no"])
with open(migo) as f:
for line in f:
x.append(float(line))
y = [[0] * len(jo)] * 120
#   print(y) 
for i in range(len(x)):
j = int(x[i])
y[idx][j] = y[idx][j]+1

您可以考虑是否应该在for循环中定义y——我怀疑不是。

相关内容

最新更新