本文实例讲述了Python查找两个有序列表中位数的方法。分享给大家供大家参考,具体如下:
今天做到的一个机试题目,很简单,这里简单记录一下:
我用的是归并的思想,当然还可以用递归的方法,下面是具体实现:
#!usr/bin/env python
#encoding:utf-8
'''''
__Author__:沂水寒城
功能:找到两个有序列表的中位数
若列表总长度为奇数则直接返回中间下标的值
否则返回前一个值,如长度为6则返回下标为2处的值
'''
import random
def random_nums_genetor(max_value=1000, total=100):
'''''
生成随机数
'''
num_list=[]
for i in range(total):
num_list.append(random.randint(1,max_value))
return num_list
def find_two_list_mid_num(num_list1,num_list2):
'''''
找到两个有序列表的中位数
'''
length1=len(num_list1)
length2=len(num_list2)
total=length1+length2
if total%2==0:
half=total/2-1
else:
half=total/2
res_list=[]
while len(num_list1) and len(num_list2):
if num_list1[0]<num_list2[0]:
res_list.append(num_list1.pop(0))
else:
res_list.append(num_list2.pop(0))
if len(num_list1):
res_list+=num_list1
elif len(num_list2):
res_list+=num_list2
#print res_list
print res_list[half]
return res_list
if __name__ == '__main__':
print "测试结果:"
num_list1=[1,2,5,7,12,45,67,100]
num_list2=[11,34,77,90]
res_list=find_two_list_mid_num(num_list1,num_list2)
print res_list[5]
print '--------------------------------------------------------'
num_list1=random_nums_genetor(max_value=1000, total=10)
num_list2=random_nums_genetor(max_value=100, total=7)
res_list=find_two_list_mid_num(num_list1, num_list2)
print res_list[8]
结果如下:
(代码摘自《Python Cookbook》)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
内蒙古资源网 Copyright www.nmgbbs.com
暂无“Python查找两个有序列表中位数的方法【基于归并算法】”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
