【问题标题】:python3: TypeError: 'generator' object is not subscriptablepython3:TypeError:“生成器”对象不可下标
【发布时间】: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


【解决方案1】:

您可以将 pArray 更改为列表列表,这将阻止您获取 TypeError: 'generator' object is not subscriptable

pArray = [[] for nn in range(a_bin)]
neve = [0 for mm in range(a_bin)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多