如何在python中找到中间数字

时间:2012-04-02 15:55:40

标签: python

鉴于3个数字,我需要找到两个数字之间的数字。

即给出3,5,2 我需要3回来。

我尝试通过所有三个并使用if else条件检查每个是否在其他两个之间来实现这一点。但这似乎是一种天真的方式来做到这一点。有更好的方法吗?

10 个答案:

答案 0 :(得分:20)

将它们放入列表中,对它们进行排序,选择中间列表。

答案 1 :(得分:12)

>>> x = [1,3,2]
>>> sorted(x)[len(x) // 2]
2

答案 2 :(得分:8)

三个数字

的最明显方式
def mean3(a, b, c):
    if a <= b <= c or c <= b <= a:
        return b
    elif b <= a <= c or c <= a <= b:
        return a
    else:
        return c

答案 3 :(得分:4)

你可以做到

numbers = [3, 5, 2]
sorted(numbers)[1]

答案 4 :(得分:4)

你想要的是中位数。您可以将以下代码用于任意数量的数字:

import numpy
numbers = [3,5,2]
median = numpy.median(numbers)

对于自定义解决方案,您可以访问此page

答案 5 :(得分:2)

这是使用累积分布的中值的O(n)实现。它比排序更快,因为排序是O(ln(n)* n)。

def median(data):
    frequency_distribution = {i:0 for i in data}
    for x in data:
        frequency_distribution[x] =+ 1
    cumulative_sum = 0
    for i in data:
        cumulative_sum += frequency_distribution[i]
        if (cumulative_sum > int(len(data)*0.5)):
            return i

答案 6 :(得分:1)

选中此项(假设已排序的列表):

def median(list):
    ceil_half_len = math.ceil((len(list)-1)/2)   # get the ceil middle element's index
    floor_half_len = math.floor((len(list)-1)/2) # get the floor middle element 's index'
    return (list[ceil_half_len] + list[floor_half_len]) / 2

答案 7 :(得分:1)

如果仅用于3个数字。首先在列表中找到最大值和最小值。删除它们,列表的其余部分为中。如果您不想使用“ if-else”或“ sorted()”,则为

def mid(a,b,c):
    num = [a,b,c]
    small, big = min(num), max(num)
    num.remove(small)
    num.remove(big)
    return num[0] # return the remainder

答案 8 :(得分:0)

这是我尝试使用更多pythonic版本

def median(a):
    sorted_a = sorted(a)
    if len(a) % 2 == 0:
        median = sum(sorted_a[(len(a)//2)-1:(len(a)//2)+1])/2.
    else:
        median = sorted_a[(len(a)-1)//2]

>>> x = [64630, 11735, 14216, 99233, 14470, 4978, 73429, 38120, 51135, 67060]
>>> median(x)
>>> 44627.5
>>> y = [1, 2, 3]
>>> median(y)
>>> 2

答案 9 :(得分:0)

如果您希望避免排序,可以执行以下操作:

def find_median(x):
    return sum(x) - max(x) - min(x)