本文实例讲述了Python查找两个有序列表中位数的方法。分享给大家供大家参考,具体如下:
今天做到的一个机试题目,很简单,这里简单记录一下:
我用的是归并的思想,当然还可以用递归的方法,下面是具体实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#!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 Cookbook》)
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/together_cz/article/details/76691923