![](/img/trans.png)
[英]TypeError: 'int' object is not subscriptable while refrencing 2d array in python
[英]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.