处理一些事情,我遇到了一个奇怪的问题,我无法搞清楚。我正在使用两种方式对包含10,000个值的列表进行排序,一个使用快速选择,另一个使用插入类型的usgae。这样做的目的是找到一个中位数然后使用所述中位数我必须找到中值和所有值之间的总距离。中位数计算工作完全正常,但总计算,由于我无法理解的原因返回不同的值。计算总数的函数的输入是列表和中位数。两个程序之间的中位数保持不变,列表的值也是如此,但是其中一个列表已排序,另一个列表未排序。
以下是我用来计算总数的方法(格式很好,只是复制到这里很奇怪)...
def ttlDist(lst, med):
total = 0
for i in lst:
total = abs(med - i)
print(total)
如果一个列表被排序而另一个列表没有被排序,为什么我会得到截然不同的值?对于参考,使用插入排序时得到的距离是49846.0,但使用quickselect时得到的距离是29982
答案 0 :(得分:1)
你没有积累任何东西;每次循环时,您都会用新值替换total
。因此,在循环结束时,total
是lst
的最后一个元素的值。排序列表和未排序列表通常具有不同的最后元素。
你可能想要的是:
total += abs(med - i)
或者,更简单地说,用以下内容替换整个函数:
total = sum(abs(med-i) for i in lst)