簡體   English   中英

循環遍歷二維數組,錯誤 TypeError: 'int' object is not subscriptable

[英]Loop over 2d array, error TypeError: 'int' object is not subscriptable

我需要用 y 2d 數組循環,但它給了我錯誤,它告訴我:回溯(最近一次調用最后一次):文件“plot.py”,第 18 行,在 y[k][j] = y[k][ j]+1 類型錯誤:'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 - 我懷疑不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM