Python查找两个有序列表中位数的方法【基于归并算法】


Posted in Python onApril 20, 2018

本文实例讲述了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查找两个有序列表中位数的方法【基于归并算法】

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
浅析Python编写函数装饰器
Mar 18 Python
快速入手Python字符编码
Aug 03 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
老生常谈Python序列化和反序列化
Jun 28 Python
人机交互程序 python实现人机对话
Nov 14 Python
python Pandas 读取txt表格的实例
Apr 29 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
python日期相关操作实例小结
Jun 24 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
Django Rest framework三种分页方式详解
Jul 26 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 #Python
Python之pandas读写文件乱码的解决方法
Apr 20 #Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 #Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 #Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 #Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 #Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 #Python
You might like
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
javascript RadioButtonList获取选中值
2009/04/09 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
详解python算法之冒泡排序
2019/03/05 Python
python实现趣味图片字符化
2019/04/30 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
Python属性和内建属性实例解析
2020/01/14 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
三爱活动实施方案
2014/03/19 职场文书
华山导游词
2015/02/03 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
《搭石》教学反思
2016/02/18 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android