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实现的简单hangman游戏实例
Jun 28 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
python编写实现抽奖器
Sep 10 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 Python
多个版本的python共存时使用pip的正确做法
Oct 26 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程序时遇到的三个问题
2012/01/17 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
JavaScript中的其他对象
2008/01/16 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
如何使用python进行pdf文件分割
2019/11/11 Python
python属于软件吗
2020/06/18 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Linux如何压缩可执行文件
2013/10/21 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
优良学风班总结材料
2014/02/08 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
迟到检讨书范文
2015/01/27 职场文书
北京导游词
2015/02/12 职场文书
二年级作文之动物作文
2019/11/13 职场文书