sorted()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sorted()相关的知识,希望对你有一定的参考价值。

一、sorted() 简单用法

sorted() 用于对序列进行排序,但是注意是产生一个新的序列,原来的序列的值不会被改变,比如定义 list = [3, 1, 4, 2, 5] ,执行 sorted(list) 之后返回结果为 [1, 2, 3, 4, 5] ,但是 list 的值仍然是 [3, 1, 4, 2, 5]

二、sorted() 复杂用法

语法:sorted(iterable, cmp=None, key=None, reverse=False)

(1) iterable:可迭代的参数,可以通过for循环去遍历的都叫可迭代
(2) cmp:用于比较的函数,比较什么由key决定,如果不写默认值为None
(3) 
key:指定根据字典的key还是value来排序,如果要使用这个参数需要用到operator模块,operator.itemgetter(0)表示根据key来排序,operator.itemgetter(1)表示根据value来排序
(4) reverse:如果是reverse = True则倒序排序,如果是reverse = False则正序排序。默认是False

In [4]: x = {1:a, 2:b, 3:c, 4:d, 5:10, 9:3, 6:3}        //先定义一个字典,我们用这个字典来练习怎么排序

In [5]: import operator          //插入operator模块

In [6]: y = sorted(x.iteritems(), key=operator.itemgetter(0))        //第一个参数x.iteritems()先迭代然后交给后面的operator.itemgetter(0)来排序,0表示根据key来排序,1表示根据value来排序。至于为什么要迭代,用法跟print与return的区别一样,如果没有迭代,那么返回的只是一个生成器对象。

In [7]: y        //查看排序后的值
Out[7]: [(1, a), (2, b), (3, c), (4, d), (5, 10), (6, 3), (9, 3)]

In [10]: y = sorted(x.iteritems(), key=operator.itemgetter(0), reverse=True)        //如果加上reverse=True表示倒序排序

In [11]: y
Out[11]: [(9, 3), (6, 3), (5, 10), (4, d), (3, c), (2, b), (1, a)]

 

练习题:找出占用空间大的文件或目录

思路:先对目录做遍历然后组成一个字典,把文件名作为key,把文件大小作为value,然后用sorted倒序排序

#!/usr/bin/env python

import sys
import os
import operator

def get_dic(topdir):                            //先对目录做遍历然后组成一个字典,把文件名作为key,把文件大小作为value
    dic = {}
    a = os.walk(topdir)
    for p, d, f in a:
        for i in f:
            fn = os.path.join(p, i)
            f_size = os.path.getsize(fn)
            dic[fn] = f_size
    return dic

if __name__ == __main__:                    //用sorted()倒序排序然后打印出文件大小最大的前10个
    dic = get_dic(sys.argv[1])
    sorted_dic = sorted(dic.iteritems(), key=operator.itemgetter(1), reverse=True)
    for k, v in sorted_dic[:10]:
        print k, -->, v

 

 

 

 

    

以上是关于sorted()的主要内容,如果未能解决你的问题,请参考以下文章

26. Remove Duplicates from Sorted Array(代码思路新奇)

内置sorted的简单实现

4. Median of Two Sorted Arrays

面试代码基础二分法binary Search Sorted Array

leetcode 21. Merge Two Sorted Lists

Stream.sorted().forEach() 是不是按预期工作? [复制]