不使用中值函数的中间数,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
对于优化,我们应该使用二进制搜索来检测中值,而不是对所有数字进行排序。 详情请参阅: 有关代码,请检查: 计算中位数有两种众所周知的方法:
希望能有帮助 对于优化,我们应该使用二进制搜索来检测中值,而不是对所有数字进行排序。 详情请参阅: 有关代码,请检查: 计算中位数有两种众所周知的方法:
希望能有帮助 为什么你不想使用中值函数?@RyneEverett听起来像是学校的作业,这是要求之一。这并不少见。他们经常让学生重新实现功能,只是为了更好地了解它们的工作原理(例如各种排序、树、哈希等)。为什么不想使用中值函数?@RyneEverett听起来像是学校的作业,这是要求之一。这并不少见。他们经常让学生重新实现特性,只是为了更好地理解它们的工作原理(例如各种排序、树、哈希等);正如问题所说,“为了使中间部分定义清楚,我应该假设L的长度是奇数。”它可能对其他有不同任务的人仍然有用,但对于这一个,他可能会因为没有阅读说明而受到惩罚。@abarnert,我知道这一点,但我仍然认为,在一个值列表有用时,添加如何获得该列表的中值是有用的,这就是为什么我说“它可能对其他具有不同任务的人仍然有用”。@abarnert,我想我们同意它是有用的,那么这是没有必要的;正如问题所说,“为了使中间部分定义清楚,我应该假设L的长度是奇数。”它可能对其他有不同任务的人仍然有用,但对于这一个,他可能会因为没有阅读说明而受到惩罚。@abarnert,我知道这一点,但我仍然认为,在列表有用的情况下,添加如何获得值列表的中值,这就是为什么我说“它可能对其他具有不同任务的人仍然有用”。@abarnert,我想我们都同意它是有用的