python实现随机生成列表,得到列表中位数并以此划分源列表

来源:互联网 发布:淘宝客链接转换二维码 编辑:程序博客网 时间:2024/06/07 00:31

    在快速排序中就需要有一个步骤来进行列表的划分,使得对于元素左边的数字都小于它,元素右边的数字都大于他,今天遇到一个问题感觉很相似,在这里花一点时间解决一下,记录学习笔记

    对指定的列表求得中位数以后以此中位数为基准划分原始列表使得比中位数小的数字都被放在了中位数的左边,比中位数大的元素都放在了中位数的右边,很简单的一个问题,但是在做的时候也遇上了一点小波折,在这里简单记录一下,下面是具体实现:


#!usr/bin/env python#encoding:utf-8'''__Author__:沂水寒城功能:得到列表中位数并以此划分源列表'''import randomdef random_num_list(max_value=10000, total=1000):    '''    功能:随机数列表生成    输入:范围和总数    输出:num_list    '''    num_list=[]    for i in range(total):        num_list.append(random.randint(1,max_value))    return num_list def simple_get_middle_num(num_list):    '''    获取列表中位数    '''    tmp_list=num_list[:]    tmp_list.sort()    return tmp_list[len(tmp_list)/2]def partition(num_list, middle_num):    '''    以中位数为界限将比中位数小的数字放在中位数左边,比它大的数字放在右边    '''    pos=num_list.index(middle_num)      j=0      length=len(num_list)     value = num_list[pos]      num_list[pos], num_list[length-1] = num_list[length-1], num_list[pos]      for i in range(0, length):          if num_list[i] < value:              print '当前列表为:', num_list            print '待交换元素及下标为:', num_list[j], num_list[i], i, j            num_list[j], num_list[i] = num_list[i], num_list[j]              print '交换后列表为:', num_list            print '----------------------------------------------------------------'            j += 1      num_list[j], num_list[length-1] = num_list[length-1], num_list[j]      return num_listif __name__ == '__main__':    num_list=random_num_list(max_value=10000, total=10)    num_list=[12,34,56,2,3,4,52,1,55]    middle_num=simple_get_middle_num(num_list)    print '中位数为:', middle_num    new_list=partition(num_list, middle_num=middle_num)    print '最终列表为:', new_list


结果如下:


中位数为: 12当前列表为: [55, 34, 56, 2, 3, 4, 52, 1, 12]待交换元素及下标为: 55 2 3 0交换后列表为: [2, 34, 56, 55, 3, 4, 52, 1, 12]----------------------------------------------------------------当前列表为: [2, 34, 56, 55, 3, 4, 52, 1, 12]待交换元素及下标为: 34 3 4 1交换后列表为: [2, 3, 56, 55, 34, 4, 52, 1, 12]----------------------------------------------------------------当前列表为: [2, 3, 56, 55, 34, 4, 52, 1, 12]待交换元素及下标为: 56 4 5 2交换后列表为: [2, 3, 4, 55, 34, 56, 52, 1, 12]----------------------------------------------------------------当前列表为: [2, 3, 4, 55, 34, 56, 52, 1, 12]待交换元素及下标为: 55 1 7 3交换后列表为: [2, 3, 4, 1, 34, 56, 52, 55, 12]----------------------------------------------------------------最终列表为: [2, 3, 4, 1, 12, 56, 52, 55, 34]

应用随机列表结果如下:


中位数为: 2488当前列表为: [8369, 1981, 3892, 851, 848, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 8369 1981 1 0交换后列表为: [1981, 8369, 3892, 851, 848, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------当前列表为: [1981, 8369, 3892, 851, 848, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 8369 851 3 1交换后列表为: [1981, 851, 3892, 8369, 848, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------当前列表为: [1981, 851, 3892, 8369, 848, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 3892 848 4 2交换后列表为: [1981, 851, 848, 8369, 3892, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------当前列表为: [1981, 851, 848, 8369, 3892, 2048, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 8369 2048 5 3交换后列表为: [1981, 851, 848, 2048, 3892, 8369, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------当前列表为: [1981, 851, 848, 2048, 3892, 8369, 1137, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 3892 1137 6 4交换后列表为: [1981, 851, 848, 2048, 1137, 8369, 3892, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------当前列表为: [1981, 851, 848, 2048, 1137, 8369, 3892, 2819, 273, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 8369 273 8 5交换后列表为: [1981, 851, 848, 2048, 1137, 273, 3892, 2819, 8369, 313, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------当前列表为: [1981, 851, 848, 2048, 1137, 273, 3892, 2819, 8369, 313, 9096, 9216, 5626, 5201, 2488]待交换元素及下标为: 3892 313 9 6交换后列表为: [1981, 851, 848, 2048, 1137, 273, 313, 2819, 8369, 3892, 9096, 9216, 5626, 5201, 2488]----------------------------------------------------------------最终列表为: [1981, 851, 848, 2048, 1137, 273, 313, 2488, 8369, 3892, 9096, 9216, 5626, 5201, 2819]

中位数为: 7020当前列表为: [2743, 557, 7889, 8481, 8393, 9366, 8302, 9729, 3293, 3964, 5240, 7002, 9202, 5711, 7020]待交换元素及下标为: 2743 2743 0 0交换后列表为: [2743, 557, 7889, 8481, 8393, 9366, 8302, 9729, 3293, 3964, 5240, 7002, 9202, 5711, 7020]----------------------------------------------------------------当前列表为: [2743, 557, 7889, 8481, 8393, 9366, 8302, 9729, 3293, 3964, 5240, 7002, 9202, 5711, 7020]待交换元素及下标为: 557 557 1 1交换后列表为: [2743, 557, 7889, 8481, 8393, 9366, 8302, 9729, 3293, 3964, 5240, 7002, 9202, 5711, 7020]----------------------------------------------------------------当前列表为: [2743, 557, 7889, 8481, 8393, 9366, 8302, 9729, 3293, 3964, 5240, 7002, 9202, 5711, 7020]待交换元素及下标为: 7889 3293 8 2交换后列表为: [2743, 557, 3293, 8481, 8393, 9366, 8302, 9729, 7889, 3964, 5240, 7002, 9202, 5711, 7020]----------------------------------------------------------------当前列表为: [2743, 557, 3293, 8481, 8393, 9366, 8302, 9729, 7889, 3964, 5240, 7002, 9202, 5711, 7020]待交换元素及下标为: 8481 3964 9 3交换后列表为: [2743, 557, 3293, 3964, 8393, 9366, 8302, 9729, 7889, 8481, 5240, 7002, 9202, 5711, 7020]----------------------------------------------------------------当前列表为: [2743, 557, 3293, 3964, 8393, 9366, 8302, 9729, 7889, 8481, 5240, 7002, 9202, 5711, 7020]待交换元素及下标为: 8393 5240 10 4交换后列表为: [2743, 557, 3293, 3964, 5240, 9366, 8302, 9729, 7889, 8481, 8393, 7002, 9202, 5711, 7020]----------------------------------------------------------------当前列表为: [2743, 557, 3293, 3964, 5240, 9366, 8302, 9729, 7889, 8481, 8393, 7002, 9202, 5711, 7020]待交换元素及下标为: 9366 7002 11 5交换后列表为: [2743, 557, 3293, 3964, 5240, 7002, 8302, 9729, 7889, 8481, 8393, 9366, 9202, 5711, 7020]----------------------------------------------------------------当前列表为: [2743, 557, 3293, 3964, 5240, 7002, 8302, 9729, 7889, 8481, 8393, 9366, 9202, 5711, 7020]待交换元素及下标为: 8302 5711 13 6交换后列表为: [2743, 557, 3293, 3964, 5240, 7002, 5711, 9729, 7889, 8481, 8393, 9366, 9202, 8302, 7020]----------------------------------------------------------------最终列表为: [2743, 557, 3293, 3964, 5240, 7002, 5711, 7020, 7889, 8481, 8393, 9366, 9202, 8302, 9729]



原创粉丝点击