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 相关文章推荐
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
Python基础语法(Python基础知识点)
Feb 28 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
Python缓存技术实现过程详解
Sep 25 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
Django数据库操作之save与update的使用
Apr 01 Python
Django admin组件的使用
Oct 24 Python
如何用Python和JS实现的Web SSH工具
Feb 23 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP 5.3.0 安装分析心得
2009/08/07 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
canvas绘制七巧板
2017/02/03 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
python避免死锁方法实例分析
2015/06/04 Python
Python语法快速入门指南
2015/10/12 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
python统计字符的个数代码实例
2020/02/07 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
监察建议书格式
2014/05/19 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
初三英语教学计划
2015/01/23 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫