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]
阅读全文
1 0
- python实现随机生成列表,得到列表中位数并以此划分源列表
- python 列表的中位数
- 随机生成题目列表
- python生成用户名列表
- python 列表生成式
- Python:列表生成式
- python列表生成式
- python 列表生成式
- python列表生成
- Python - 列表生成式
- python 列表生成式
- python列表生成式
- python 生成列表
- Python生成列表
- python列表生成式
- python如何生成列表
- Python列表生成式
- python列表生成式
- 【JavaSE学习笔记】集合01_Collection,List
- macOS 下 Java 环境变量配置
- 终章-从0到1开启web前端学习之旅
- hdu 2586 How far away ?(lca-在线ST)
- 版本控制mercurial(hg)常用命令
- python实现随机生成列表,得到列表中位数并以此划分源列表
- sudoku(数独)
- 习题3-12 浮点数(Floating-Point Numbers, UVa11809)
- POJ 2367 topological_sort
- Git常用操作系列(1)
- 【剑指offer】面试题40:最小的k个数
- Python学习(六)——迭代、文件读写
- D
- 特征工程笔记(1)