Python 未排序的数字列表在直方图计算中产生不正确的输出
我正在制作一个函数,该函数将生成一个列表,其中包括所请求列表的直方图和所请求的值,以用作直方图的值。最后包括高于请求值的值 该程序正在处理一个按数字升序排序的列表,但当一个未排序的列表用作输入时,该程序似乎会丢弃随机值,而不会以相同的方式进行计算。 守则:Python 未排序的数字列表在直方图计算中产生不正确的输出,python,histogram,Python,Histogram,我正在制作一个函数,该函数将生成一个列表,其中包括所请求列表的直方图和所请求的值,以用作直方图的值。最后包括高于请求值的值 该程序正在处理一个按数字升序排序的列表,但当一个未排序的列表用作输入时,该程序似乎会丢弃随机值,而不会以相同的方式进行计算。 守则: def histogram(sample, binBoundaries): c=0 if not binBoundaries: li = [len(sample)] return print(l
def histogram(sample, binBoundaries):
c=0
if not binBoundaries:
li = [len(sample)]
return print(li)
for x in sample:
if x > binBoundaries[-1]: #if the value is greater than last bin
c = c+1 #number of values greater increases
for eachbin in binBoundaries: #for each bin
dic[eachbin] = 0 #initial value = 0 to account for no number
for x in sample: #for each value wanted to calculate for
if x <= eachbin: #if the number falls into the bin
dic[eachbin] += 1 #the number of values in the bin increases
sample.remove(x)
for i in dic:
listofvalues.append(dic[i])
listofvalues.append(c)
print(listofvalues)
def直方图(示例、边界):
c=0
如果没有边界:
li=[len(样本)]
返回打印(li)
对于样本中的x:
如果x>bin边界[-1]:#如果该值大于最后一个bin
c=c+1#值的数量增加越多
对于BINbounders中的每个bin:#对于每个bin
dic[eachbin]=0#初始值=0表示无编号
对于样本中的x:#对于要计算的每个值
如果x您的问题是在迭代列表时从列表sample
中删除项目,这是一个坏主意,因为它会导致跳过某些元素
尝试取出行示例。删除(x)
,您应该会得到预期的结果。如果确实需要从输入列表中删除元素,则应该重构以确保仍然检查列表中的每个元素。一个选项是使用反向(示例)
中的x的反向迭代列表
它看起来还可能是您在错误的位置删除元素,sample.remove(x)
看起来它应该位于if
的正上方。请尝试以下代码:
...
for eachbin in binBoundaries: #for each bin
dic[eachbin] = 0 #initial value = 0 to account for no number
for x in reversed(sample): #for each value wanted to calculate for
if x <= eachbin: #if the number falls into the bin
dic[eachbin] += 1 #the number of values in the bin increases
sample.remove(x)
...
。。。
对于BINbounders中的每个bin:#对于每个bin
dic[eachbin]=0#初始值=0表示无编号
对于反向(示例)中的x:#对于要计算的每个值
如果x,为什么有返回打印(li)
?根据问题中的描述,这并不能满足您的要求。如果没有Binboundari的输入,返回打印(li)将处理错误。您是否测试过该条件return print()
不会按照您的想法执行。它会打印li的值。我并不是真的关心这一部分:如果你只想打印值,为什么你有返回
?我所有的问题都是因为位置问题,非常感谢!现在,在那次更改之后,程序出现了一个问题,即无法正确处理多个数字。但是,随着示例列表的反转,它也解决了这个问题。为什么反转有帮助?@Benjamin-很好地解释了为什么在迭代时删除会导致问题。反转列表会有帮助,因为您将首先删除末尾的元素,这不会影响列表中前面任何元素的索引。我想我也可以通过使用sorted()对列表进行排序来解决此问题。感谢您对F.J.的见解。那篇文章帮助我解决了剩余的作业!