本文实例讲述了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