Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用中值函数的中间数,Python_Python_Median - Fatal编程技术网

不使用中值函数的中间数,Python

不使用中值函数的中间数,Python,python,median,Python,Median,我一直在寻找如何在列表中找到中间数,这样我就不用中值函数,但找不到如何做到这一点的信息 def middle (L): i= len((L)[0:-1])/2 return i print (middle) 我需要编写一个以中间(L)函数(必须定义它)的代码,将列表L作为其参数,并将该项返回到L的中间位置(为了使中间定义良好,我假设L具有奇数长度)。 这就是我现在所拥有的一切,实际上我不知道如何做到这一点 def middle (L): i= len((L)[0:-1]

我一直在寻找如何在列表中找到中间数,这样我就不用中值函数,但找不到如何做到这一点的信息

def middle (L):
    i= len((L)[0:-1])/2
    return i
print (middle)

我需要编写一个以中间(L)函数(必须定义它)的代码,将列表L作为其参数,并将该项返回到L的中间位置(为了使中间定义良好,我假设L具有奇数长度)。 这就是我现在所拥有的一切,实际上我不知道如何做到这一点

def middle (L):
    i= len((L)[0:-1])/2
    return i
print (middle)

找到中值,只需排序列表并在中间位置返回数字(或者如果列表中有偶数个元素),返回中间2个元素的平均值:

def middle(L):
    L = sorted(L)
    n = len(L)
    m = n - 1
    return (L[n/2] + L[m/2]) / 2.0

例如:

>>> print middle([1, 2, 3, 4, 5])
3.0
>>> print middle([1, 2, 3, 4, 5, 6])
3.5

找到中值,只需排序列表并在中间位置返回数字(或者如果列表中有偶数个元素),返回中间2个元素的平均值:

def middle(L):
    L = sorted(L)
    n = len(L)
    m = n - 1
    return (L[n/2] + L[m/2]) / 2.0

例如:

>>> print middle([1, 2, 3, 4, 5])
3.0
>>> print middle([1, 2, 3, 4, 5, 6])
3.5

正如NPE的回答所建议的,当列表的元素数不均匀时,只需获取排序列表的中间元素,如果列表的元素数为偶数,则取中间两个元素的平均值:

def median(l):
    srt = sorted(l)
    mid = len(l)//2
    if len(l) % 2: # f list length mod 2 has a remainder the list is an odd lenght
            return srt[mid]
    else:
        med = (srt[mid] + srt[mid-1]) / 2  # in a list [1,2,3,4] srt[mid]-> 2, srt[mid-1] -> 3
        return med

正如NPE的回答所建议的,当列表的元素数不均匀时,只需获取排序列表的中间元素,如果列表的元素数为偶数,则取中间两个元素的平均值:

def median(l):
    srt = sorted(l)
    mid = len(l)//2
    if len(l) % 2: # f list length mod 2 has a remainder the list is an odd lenght
            return srt[mid]
    else:
        med = (srt[mid] + srt[mid-1]) / 2  # in a list [1,2,3,4] srt[mid]-> 2, srt[mid-1] -> 3
        return med

对于优化,我们应该使用二进制搜索来检测中值,而不是对所有数字进行排序。 详情请参阅:

有关代码,请检查:

计算中位数有两种众所周知的方法:

  • 天真的方式(排序,选择中间)

  • 使用quickselect(或加权中值的类似算法)


  • 希望能有帮助

    对于优化,我们应该使用二进制搜索来检测中值,而不是对所有数字进行排序。 详情请参阅:

    有关代码,请检查:

    计算中位数有两种众所周知的方法:

  • 天真的方式(排序,选择中间)

  • 使用quickselect(或加权中值的类似算法)


  • 希望能有帮助

    为什么你不想使用中值函数?@RyneEverett听起来像是学校的作业,这是要求之一。这并不少见。他们经常让学生重新实现功能,只是为了更好地了解它们的工作原理(例如各种排序、树、哈希等)。为什么不想使用中值函数?@RyneEverett听起来像是学校的作业,这是要求之一。这并不少见。他们经常让学生重新实现特性,只是为了更好地理解它们的工作原理(例如各种排序、树、哈希等);正如问题所说,“为了使中间部分定义清楚,我应该假设L的长度是奇数。”它可能对其他有不同任务的人仍然有用,但对于这一个,他可能会因为没有阅读说明而受到惩罚。@abarnert,我知道这一点,但我仍然认为,在一个值列表有用时,添加如何获得该列表的中值是有用的,这就是为什么我说“它可能对其他具有不同任务的人仍然有用”。@abarnert,我想我们同意它是有用的,那么这是没有必要的;正如问题所说,“为了使中间部分定义清楚,我应该假设L的长度是奇数。”它可能对其他有不同任务的人仍然有用,但对于这一个,他可能会因为没有阅读说明而受到惩罚。@abarnert,我知道这一点,但我仍然认为,在列表有用的情况下,添加如何获得值列表的中值,这就是为什么我说“它可能对其他具有不同任务的人仍然有用”。@abarnert,我想我们都同意它是有用的