1.贴题
题目来自PythonTip
求中位数
给你一个整数列表L, 输出L的中位数(若结果为小数,则保留一位小数)。
例如: L=[0,1,2,3,4]
则输出:2
2.说明
- 如果列表有奇数个整数,则输出中间那个
- 如果列表有偶数个整数,则输出中间两个的平均值
3.参考代码
l = len(L) #数出列表中有几个元素,将个数放到l里
L.sort() #将列表按升序排列
if l%2 == 0: #如果有偶数个整数
m = (L[int(l/2) - 1] + L[int(l/2)]) / 2 #计算中间两个的平均值,存到m里
print("%.1f" % m) #按一位小数打印m
else: #如果有奇数个整数
m = L[int((l-1)/2)] #将中间那个整数的值存到m里
print(m) #直接打印m
4.改进
- 因为python进行除法后会转换成float类型,所以即使能够整除也要转换一下类型。更简洁的写法是使用整除//
- 备注一下,如果是python2版本直接进行除法会保留整数跟c语言一样
5.其他写法
L = sorted(L)
print(L[len(L)//2] if len(L)%2==1 else "%.1f"%(0.5*(L[len(L)//2-1]+L[len(L)//2])))
6.后记
这道题没有什么特殊的地方,踏踏实实把每一个要求做到就好了。刚开始可以怎么想的就怎么写代码,然后再提炼看有没有可以简化的地方,如果有余力还可以挑战一下写成列表推导式。理论上能应该都可以写成列表推导式的。