python如果elif不同的结果

时间:2014-05-25 14:48:38

标签: python if-statement quicksort median

如何找到第1个元素,最后一个元素和中间元素的中位数,然后将第一个元素与中位数交换?

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,您可以这样做:

from numpy import median

values    = [1,2,3,4,5,6]
med       = median([values[0], values[len(values)/2], values[-1]]) # calculate median of first, middle and last element in the list
values[0] = med # replace first element with median

结果是:

>>> med
4.0
>>> values
[4.0,2,3,4,5,6]

这回答了您的问题,但我不确定它究竟是您想要的。您可以尝试重新编写问题,以使其更准确地说明您希望最终输出列表看起来像什么。

<强>更新

如评论中所述,它似乎交换列表中的值等于中位数,第一个元素是所需的输出。在这种情况下,请尝试以下方法:

halfway_idx = len(values)/2
med         = median([values[0], values[halfway_idx], values[-1]])
if med == values[0]:
   pass # median already is in the first position
elif med == values[halfway_idx]:
   values[0], values[halfway_idx] = values[halfway_idx], values[0] #swap middle and first
else:
   values[0], values[-1] = values[-1], values[0] # swap first and last