python 3.6.3 未声明长度列表的索引错误

标签 python syntax-error

所以我正在构建一个程序来根据给定的值列表生成直方图,主要的数字处理位如下所示:

x=[] #declare x list(unnecessary?)
i=0 #declare i (unnecessary?)
for i in range(0, len(data)):
    comp = data[i] #grab 'i'th data value
    for j in range(0, bins): #determine which bin data point belongs
        lorng=lo+(j*binwidth)
        hirng=lo+((j+1)*binwidth)
        if comp==lo:
            x[0]+=1 #increment lowest value bin for lowest value data
        if comp > lorng and comp <= hirng: 
            x[j]+=1 #increment bin for data in a given range
print(x)

不幸的是,我在x[0]+=1上收到列表索引超出范围错误。我需要声明列表长度吗?从其他线程看来我不需要这样做。

编辑:我已将 x[] 更改为 x=np.zeroes(shape=(1,bins),但现在它抛出无效语法错误在 i=0 上,所以我无法检查它

最佳答案

x 是一个空列表,不支持任何类型的索引。这就是 x[0]+=1 给出错误的原因。

由于您愿意使用 numpy,因此您可以使用 histogram 实现相同的效果。 .

import numpy as np

values = np.random.randint(0, 101, 1000)
hist = np.histogram(values, bins=10)
print(hist)

这会创建一个包含 0 到 100 之间 1000 个随机数的列表,然后将它们分为 10 个容器。如果您想在纯Python中执行此操作,则必须事先使用正确数量的索引初始化列表:x = [0 for i in range(num_bins)](或类似)。

要在代码注释中解决您的问题:

  1. 是的,按照您的方法,您需要首先定义 x(如所讨论的)。
  2. 不,不需要声明ifor i in range(0, len(data)): 会处理这个问题。

编辑:

刚刚注意到您在我处理此答案时所做的编辑:

  1. i = 0 上的 SyntaxError 实际上是由之前的行引起的:x=np.zeroes(shape=(1,bins) 缺少右括号。
  2. 您不需要 shape=(1, bins) 因为这会给您一个二维数组。如果您想以这种方式初始化 x,请使用 x = np.zeros(bins),而不是我的 Python 方法。

关于python 3.6.3 未声明长度列表的索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48530092/

相关文章:

c - 不知从何而来的 Bison 语法错误

c++ - C2061 错误 : 'identifier' , 但我包含了 header ?

javascript - catch 语句可以捕获 JavaScript 中的语法错误吗?

java - 测试 NFE 的 Catch 语句

python - 生成线条的热图图像

Python + 散点图 + 其他废话

sql - 在sys.servers中找不到服务器 'dbo'。

Python - 对数组进行排序以在其中进行搜索的最有效方法

python - (python 矩阵)可视化 mllib 评估

python - 问题 : Model dowloading with custom vision & python API