gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:13:50 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com