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

时间:2020-03-28 11:23:44

标签: python for-loop

我需要使用y 2d数组循环,但这给了我错误,它告诉我: 追溯(最近一次通话): 在第18行的文件“ plot.py”中 y [k] [j] = y [k] [j] +1 TypeError:“ 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()

1 个答案:

答案 0 :(得分:0)

如果您运行

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

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