0

在做一些事情时,我遇到了一个奇怪的问题,我无法弄清楚。我以两种方式对包含 10,000 个值的列表进行排序,一种使用快速选择,另一种使用插入排序。这样做的目标是找到一个中值,然后使用所述中值我必须找到中值和所有值之间的总距离。中位数计算工作得非常好,但由于我无法理解的原因,总计算返回不同的值。计算总数的函数的输入是列表和中位数。两个程序之间的中位数保持不变,列表的值也一样,但是其中一个列表已排序,而另一个列表未排序。

这是我用来计算总数的内容(对此的格式很好,它只是复制到这里很奇怪)......

def ttlDist(lst, med):
    total = 0
    for i in lst:
        total = abs(med - i)
    print(total)

一个列表被排序而另一个列表没有被排序,为什么我会得到截然不同的值?作为参考,我在使用插入排序时得到的距离是 49846.0,但在使用快速选择时得到的距离是 29982

4

1 回答 1

1

你没有积累任何东西;total每次通过循环时,您都将替换为一个新值。因此,在循环结束时,total是 的最后一个元素的值lst。排序列表和未排序列表通常具有不同的最后一个元素。

你可能想要的是:

total += abs(med - i)

或者,更简单地说,将整个函数替换为:

total = sum(abs(med-i) for i in lst)
于 2013-10-08T21:02:59.440 回答