首页 > 编程 > Python > 正文

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

2020-02-22 23:46:59
字体:
来源:转载
供稿:网友

本文实例讲述了Python查找两个有序列表中位数的方法。分享给大家供大家参考,具体如下:

今天做到的一个机试题目,很简单,这里简单记录一下:

我用的是归并的思想,当然还可以用递归的方法,下面是具体实现:

#!usr/bin/env python#encoding:utf-8'''''__Author__:沂水寒城功能:找到两个有序列表的中位数若列表总长度为奇数则直接返回中间下标的值否则返回前一个值,如长度为6则返回下标为2处的值'''import randomdef 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_listdef 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_listif __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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表