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