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学习笔记之os模块使用总结
Nov 03 Python
剖析Python的Twisted框架的核心特性
May 25 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Python 处理数据的实例详解
Aug 10 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
python实现log日志的示例代码
Apr 28 Python
python处理multipart/form-data的请求方法
Dec 26 Python
kafka-python批量发送数据的实例
Dec 27 Python
Python语法分析之字符串格式化
Jun 13 Python
python日期相关操作实例小结
Jun 24 Python
Django自带用户认证系统使用方法解析
Nov 12 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 at(@)符号的用法简介
2009/07/11 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
jQuery实现广告条滚动效果
2017/08/22 jQuery
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
python实现杨辉三角思路
2017/07/14 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
python构造函数init实例方法解析
2020/01/19 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
init进程的作用
2012/04/12 面试题
详细的大学生创业计划书模板
2014/01/27 职场文书
书法大赛策划方案
2014/06/04 职场文书
医院义诊活动总结
2014/07/04 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
公开致歉信
2019/06/24 职场文书
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android
SpringBoot Http远程调用的方法
2022/08/14 Java/Android