【发布时间】:2020-08-18 10:17:07
【问题描述】:
我对 python 很陌生。 我正在尝试使用 2d 列表运行一个简单的代码。但我收到一个错误: “TypeError:‘生成器’对象不可下标”。谁能帮我解决这个问题?或者代码有什么问题。
import sys
import numpy as np
from scipy import stats
max_event = 1000000
a_bin = 10 # number each bin from 0-->10 where cumulant calculation will be done
# Define 2D array for [ bin, here 0->10][proton in each bin]
pArray = (() for nn in range(a_bin))
neve = (0 for mm in range(a_bin))
for ii in range(0, max_event):
_a = np.random.randint(10)
_b = np.random.randint(120)
if ii % 1000 == 0:
print(ii, _a, _b)
for j in range(0, 10):
if _a == j:
pArray[j].append(_b)
neve[j] += 1
print("filling done!")
for k in range(0, a_bin):
mu2 = stats.mstats.moment(pArray[k], moment=2)
mu4 = stats.mstats.moment(pArray[k], moment=4)
print('serial = %d, mu_2 = %f , mu_4 = %f, event = %d' %
(k, mu2, mu4, neve[k]))
# print k, neve[k], c1[k], c2[k], c3[k], c4[k], c5[k], c6[k]
print("calculation done!")
这是我得到的输出:
0 9 18 Traceback(最近一次调用最后一次):文件“calcumuBin.py”,行 23,在 pArray[j].append(_b) TypeError: 'generator' object is not subscriptable
【问题讨论】:
-
生成器不可下标。如果您想索引
pArray,请将其改为列表。 -
pArray不是list(绝对不是数组)。您使用了一个生成器表达式,它创建了一个生成器对象。不要那样做。如果你对 python 很陌生,那么在没有完全理解它们的情况下,你不应该使用这些更高级的结构。
标签: python python-3.x list python-2.7