先看下帮助文档: >>> help(list.sort) Help on method_descriptor: sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; cmp(x, y) -> -1, 0, 1 >>> help(sorted) Help on built-in function sorted in module __builtin__: sorted(...) sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list 简单解释一下两函数: sort(cmp=None, key=None, reverse=False)sorted(iterable, cmp=None, key=None, reverse=False) sort是容器的函数,sorted是Python的内建函数 相同的参数: cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项。cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2。 默认为 None, 即用内建的比较函数。 key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项。 reverse:排序规则,reverse = True 或者 reverse = False,有默认值。 sorted多一个参数iterable:待排序的可迭代类型的容器 看下两函数简单的用法(也是最本质的区别): >>> help(list.sort) Help on method_descriptor: sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; cmp(x, y) -> -1, 0, 1 >>> help(sorted) Help on built-in function sorted in module __builtin__: sorted(...) sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list 对于一个无序的列表a,调用a.sort(),对a进行排序后返回a。 而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。 接着看下两函数复杂点的用法: 假设用一个tuple保存每一个员工的信息,包括工号,姓名,年龄。用一个list保存所有的员工信息。 >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> list1.sort() >>> list1 [(4, 'wutenglan', 30), (6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25)] >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> sorted(list1) [(4, 'wutenglan', 30), (6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25)] >>> list1 [(6, 'cangjingkong', 20), (4, 'wutenglan', 30), (7, 'boduoyejiyi', 25)] 当list由tuple组成时,默认情况下,sort和sorted都会根据tuplp[0]作为排序的key进行排序。 当然,我们完全可以控制它的排序行为: 1.基于key函数排序: >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> list1.sort(key=lambda employee : employee[2]) >>> list1 [(6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25), (4, 'wutenglan', 30)] >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> sorted(list1,key=lambda employee : employee[2]) [(6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25), (4, 'wutenglan', 30)] >>> list1 [(6, 'cangjingkong', 20), (4, 'wutenglan', 30), (7, 'boduoyejiyi', 25)] 此时,list根据员工年龄排序。 2.基于cmp函数排序: >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> list1.sort(cmp=lambda x,y : cmp(x[1],y[1])) >>> list1 [(7, 'boduoyejiyi', 25), (6, 'cangjingkong', 20), (4, 'wutenglan', 30)] >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> sorted(list1,cmp=lambda x,y : cmp(x[1],y[1])) [(7, 'boduoyejiyi', 25), (6, 'cangjingkong', 20), (4, 'wutenglan', 30)] >>> list1 [(6, 'cangjingkong', 20), (4, 'wutenglan', 30), (7, 'boduoyejiyi', 25)] 此时,list根据员工姓名排序。 3.基于升序/降序排序: >>> a=[1,3,5,2,9,4,7,8,6,0] >>> a.sort(reverse=False) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a.sort(reverse=Ture) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'Ture' is not defined >>> a=[1,3,5,2,9,4,7,8,6,0] >>> a.sort(reverse=False) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a=[1,3,5,2,9,4,7,8,6,0] >>> a.sort(reverse=True) >>> a [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> a=[1,3,5,2,9,4,7,8,6,0] >>> sorted(a,reverse=False) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> sorted(a,reverse=True) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> a [1, 3, 5, 2, 9, 4, 7, 8, 6, 0] 通过参数reverse控制升序/降序。 转载请保留固定链接: https://linuxeye.com/program/1771.html |