L.sort()
n = len(L)
m = n/2
if n == 0:print 'None'
elif n%2 == 0:print "%.1f"%((L[m]+L[m-1])/2.0)
else:print L[m]

原题目:

给你一个list L, 如 L=[0,1,2,3,4], 输出L的中位数(若结果为小数,则保留一位小数)。

下面内容转载自:http://www.linuxidc.com/Linux/2014-11/108912.htm,来源:Linux社区 作者:tanzhangwen,如侵权请联系删除,抱歉。


sorted与sort的区别

1. sorted函数是内建函数,而sort是序列的内部函数,所以它们调用方式不一样,另外sorted函数多了一个系列迭代器参数

2. sorted函数不改变参数系列,但是返回排好序的序列副本;而sort作为序列的内部函数,调用完后会对调用的序列进行排序

下面的结果很好的说明了这些:

>>> list=[2,1]
>>> x=sorted(list)
>>> x
[1, 2]
>>> list
[2, 1]
>>> y=list.sort()
>>> y
>>> list
[1, 2]

sorted与sort的参数:

sorted与sort除了一个是序列作为参数,一个是序列调用该函数,其他参数几乎完全一致,下面逐一来介绍其用法及效果:

1. 默认用法

由于sort函数的参数reverse,key,cmp都提供了缺省参数,所以我们可以直接不指定这些参数值调用该函数。但是它必须有一个前提,就是list中存放的类型是可比较的。否则就会弹出错误“Type Error: unorderable type"。

2. reverse参数

当取值为True时候就是倒序排,默认为False正序从小到大排

>>> list.sort(reverse=False)
>>> list
[1, 2]
>>> list.sort(reverse=True)
>>> list
[2, 1]

3. key参数

key表示用来做比较的值,这个主要对自定义的数据类型有用。下面用一个例子来诠释:

# Definition for an interval.
class Interval:
 def __init__(self, s=0, e=0):
  self.start = s
  self.end = e

# Initialize the Interval list
list = []
for i in range(10,7,-1):
 for j in range(11,i,-1):
  list.append(Interval(i,j))

这里我们定义了Interval为[s,e]的数据结构并且初始化了。对于这个问题,显然我们用缺省的参数来调用会出错,因为我们没有提供可比较的函数来比较类型Interval。对于这样的情况,我们就可以指定比较的key来解决。

#Sort the Interval list
list2 = sorted(list,key=lambda x:x.start)

#Output the Interval list
for x in list:
 print("[%d,%d]"%(x.start,x.end))
for x in list2:
 print("[%d,%d]"%(x.start,x.end))

这里我们基于Interval.start作为key进行排序了。

可是接着问题来了,如果我不仅比较Interval.start,当Interval.start相等时候,还想比较Interval.end,该怎么办?

#Sort the Interval list based on Interval.start and Interval.end
list2 = sorted(list,key=lambda x:(x.start,x.end))

我们用元祖(Interval.start,Interval.end)作为key来比较,而元祖有默认的cmp函数。这就达到了目标。

4. cmp参数

我们可以通过自定义函数或则使用简洁的lambda来作为参数传给cmp

#Sort the Interval list based on Interval.start and Interval.end
def cmpInterval(a, b):
 if a.start != b.start:
  return cmp(a.start,b.start)
 return cmp(a.end,b.end)
list1 = sorted(list,cmp = cmpInterval)
list2 = sorted(list,cmp = lambda x,y:cmp(x.start,y.start))

不过比较遗憾的是发现在python 3.x中传入cmp函数会出现一个错误:TypeError: 'cmp' is an invalid keyword argument for this function
这时候我们就需要使用key来绕过这个问题。另外一个建议就是我们尽量使用key而不是cmp来排序以提高运行速度。

python:求list的中位数相关推荐

  1. python求均值、中位数、众数的方法

    首先需要数据源,这里随便写了一个: nums = [1,2,3,4] 求均值和中位数均可以使用numpy库的方法: import numpy as np#均值 np.mean(nums) #中位数 n ...

  2. python求无序列表中位数_python 实现在无序数组中找到中位数方法

    一.问题描述 1.求一个无序数组的中位数, (若数组是偶数,则中位数是指中间两个数字之和除以2,若数组是奇数,则中位数是指最中间位置.要求:不能使用排序,时间复杂度尽量低 2.例如:lists = [ ...

  3. python求无序列表中位数_详解Python如何获取列表(List)的中位数

    前言 中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据 ...

  4. python求列表的中位数_python中获取中位数的两种方法

    普通方法: 对列表进行排序,然后根据长度为奇数或者偶数的不同情况计算中位数 def huahua(x): length = len(x) print(length) x.sort() print(x) ...

  5. python求平均数和中位数

    import numpy as np mun = [1,2,3,4,5] #平均值 np.mean(mun) #中位数 np.median(mun)

  6. python中列表数据汇总和平均值_python的列表List求均值和中位数实例

    这篇文章主要介绍了python的列表List求均值和中位数实例,具有很好对参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 我就废话不多说了,直接上代码吧! import numpy as np ...

  7. python平均数 中位数函数_R和python语言如何求平均值,中位数和众数

    均值是通过取数值的总和并除以数据序列中的值的数量来计算. R语言平均值公式: mean(x, trim = 0, na.rm = FALSE, ...) #x - 是输入向量.trim - 用于从排序 ...

  8. [转载] python下求语数总分和平均值_R和python语言如何求平均值,中位数和众数

    参考链接: 在Python中计算均值,中位数和众数 均值是通过取数值的总和并除以数据序列中的值的数量来计算. R语言平均值公式: mean(x, trim = 0, na.rm = FALSE, .. ...

  9. python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数

    python求平均数.方差.中位数的例子 CalStatistics.py def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入 ...

  10. python计算列表中位数的函数_python的列表List求均值和中位数实例

    我就废话不多说了,直接上代码吧! import numpy as np a = [2,4,6,8,10] average_a = np.mean(a) median_a = np.median(a) ...

最新文章

  1. 重温强化学习之无模型学习方法:TD(lambda)
  2. SAP CRM pricing read的实现逻辑
  3. python访问网页如何查看user-agent_HTTP请求头之User-Agent
  4. Linux环境下为普通用户添加sudo权限
  5. group by很多字段是不是会很慢_数据量很大,分页查询很慢,推荐个优化方案!...
  6. (转)听赌徒谈风险:没犯任何错误照样输个精光
  7. 计算机通信系统分哪两类,通信系统的组成(数字通信系统由哪几部分组成)
  8. MD5是什么, MD5怎么用
  9. 预备篇:一.元器件选型及飞控电路设计
  10. Python自学记录--steam密码加密逆向
  11. 用计算机程序方式打开,怎么使用运行命令符打开电脑程序
  12. POI实现超大数据的Excel的读写操作,支持Excel最大行数。
  13. 9款别出心裁的jQuery插件
  14. 在vue中使用three.js创建一个简单的立体图形
  15. Stay hungry, Stay foolish 的原义
  16. VDP安装完成之后显示[009]Maintenance are not running
  17. 2019 CCPC wannfly winter camp Day 8
  18. xx公司网站建设方案
  19. 微软文字转语音工具(在线版)
  20. Linux磁盘分区命名方式及常用磁盘管理命令

热门文章

  1. iOS开发之颜色渐变
  2. 认清有毒的矿物质元素 预防中毒
  3. VTK笔记-图形相关-两个平面上的多边形+三角带=闭合多边形(棱柱体)
  4. 物联网--解决ESP8266与电脑串口通讯
  5. app做好后如何上线_自己开发一个APP,如何上线
  6. C语言控制鼠标自动画图
  7. 植物大战僵尸之修改阳光
  8. 路由器的网络连接模式(桥接模式和路由模式)
  9. 我所理解的Reed solomon 算法
  10. boost斩波电路控制系统C语言,Boost升压斩波电路[精华]