1. 程式人生 > >python找到兩個有序列表的中位數

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__':
    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]


結果如下:

12
12
--------------------------------------------------------
969
969
[Finished in 0.3s]