Python list排序

一、 python提供的对list进行排序的方法

1、方法:

(1)list的内建函数list.sort进行排序,

(2)用序列类型函数sorted(list)进行排序。

2、示例:

>>> a_list = [2,5,4,3,1]
    >>> a_list
    [2, 5, 4, 3, 1]
    >>> sorted(a_list)
    [1, 2, 3, 4, 5]
    >>> a_list
    [2, 5, 4, 3, 1]
    >>> a_list.sort()
    >>> a_list
    [1, 2, 3, 4, 5]
    >>>

3、说明:

(1)sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象

(2)list.sort()不会返回对象,改变原有的list

二、list.sort()方法的讲解

1、

从Python2.4开始, sort方法有了三个可选的参数:cmp,key, reverse

Python Library Reference里这样描述:

cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument:
"cmp=lambda x,y: cmp(x.lower(), y.lower())"
key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower"
reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an
equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.

2、示例

实例1:
    >>>L = [2,3,1,4]
    >>>L.sort()
    >>>L
    >>>[1,2,3,4]
实例2:
    >>>L = [2,3,1,4]
    >>>L.sort(reverse=True)
    >>>L
    >>>[4,3,2,1]
实例3:对第二个关键字排序
    >>>L = [(‘b‘,6),(‘a‘,1),(‘c‘,3),(‘d‘,4)]
    >>>L.sort(lambda x,y:cmp(x[1],y[1]))
    >>>L
    >>>[(‘a‘, 1), (‘c‘, 3), (‘d‘, 4), (‘b‘, 6)]
实例4: 对第二个关键字排序
    >>>L = [(‘b‘,6),(‘a‘,1),(‘c‘,3),(‘d‘,4)]
    >>>L.sort(key=lambda x:x[1])
    >>>L
    >>>[(‘a‘, 1), (‘c‘, 3), (‘d‘, 4), (‘b‘, 6)]
实例5: 对第二个关键字排序
    >>>L = [(‘b‘,2),(‘a‘,1),(‘c‘,3),(‘d‘,4)]
    >>>import operator
    >>>L.sort(key=operator.itemgetter(1))
    >>>L
    >>>[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3), (‘d‘, 4)]
实例6:(DSU方法:Decorate-Sort-Undercorate)
    >>>L = [(‘b‘,2),(‘a‘,1),(‘c‘,3),(‘d‘,4)]
    >>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
    >>>A.sort()
    >>>L = [s[2] for s in A]
    >>>L
    >>>[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3), (‘d‘, 4)]
以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项
为比较关键字进行排序.
效率比较:
cmp < DSU < key
通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当

多关键字比较排序:
实例7:
>>>L = [(‘d‘,2),(‘a‘,4),(‘b‘,3),(‘c‘,2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[(‘d‘, 2), (‘c‘, 2), (‘b‘, 3), (‘a‘, 4)]
我们看到,此时排序过的L是仅仅按照第二个关键字来排的,

如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?有两种方法
实例8:
    >>> L = [(‘d‘,2),(‘a‘,4),(‘b‘,3),(‘c‘,2)]
    >>> L.sort(key=lambda x:(x[1],x[0]))
    >>> L
    >>>[(‘c‘, 2), (‘d‘, 2), (‘b‘, 3), (‘a‘, 4)]
实例9:

>>>import operator
    >>> L = [(‘d‘,2),(‘a‘,4),(‘b‘,3),(‘c‘,2)]
    >>> L.sort(key=operator.itemgetter(1,0))
    >>> L
    >>>[(‘c‘, 2), (‘d‘, 2), (‘b‘, 3), (‘a‘, 4)]
为什么实例8能够工作呢?原因在于tuple是的比较从左到右比较的,比较完第一个,如果
相等,比较第二个

时间: 2024-10-03 07:53:19

Python list排序的相关文章

&lt;转&gt;python字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

python 字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

python sorted排序

python sorted排序 Python不仅提供了list.sort()方法来实现列表的排序,而且提供了内建sorted()函数来实现对复杂列表的排序以及按照字典的key和value进行排序. sorted函数原型 sorted(data, cmp=None, key=None, reverse=False) #data为数据 #cmp和key均为比较函数 #reverse为排序方向,True为倒序,False为正序 基本用法 对于列表,直接进行排序 >>> sorted([5, 2

python选择排序

def select_sort(list): for i in range(len(list)): position = i for j in range(i,len(list)): if list[position] > list[j]: position = j temp = list[i] list[i] = list[position] list[position] = temp list = [4,4,11,23,4,5,7,9,0,111] select_sort(list) lis

Python实现排序算法之快速排序

Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它小的放到它前面,所有比它大的放到它后面,这个过程称为一趟快速排序 快速排序原理图如下: 实现 #coding=utf-8 #python实现快速排序 def quick_sort(li,start,end): if start < end: flag = li[start] print(flag)

Python字典排序

#!/usr/bin/env python import os import sys import operator def getFile(dir1):     d = os.walk(dir1)     dic = {}     for a,b,c in d:         for i in c:             fn = os.path.join(a,i)             f_size = os.path.getsize(fn)             dic[fn] =

Python实现排序(冒泡、快排、归并)

Thomas H.Cormen 的<算法导论>上介绍的几个经典排序算法的Python实现. 1.冒泡排序: 简单的两重循环遍历,使最小(最大)的值不断地往上升(下沉)而实现的排序,算法时间为O(n2). 代码如下: 1 def up_sort(a): 2 # 冒泡排序 3 4 a_length = len(a) 5 while True: 6 i = 0 7 j = 1 8 9 while True: 10 if a[i] > a[j]: 11 a[i], a[j] = a[j], a[

Python的排序

Python内置函数sorted可以对可迭代对象进行排序,其中有cmp和key两个参数,这两个参数对排序的效率有很大的影响. cmp是一个回调函数,原型是:cmp(x, y) ,这与其他语言的sort函数相似,上层自己对元素x和y进行比较,最终返回-1, 0, 1,以此来决定谁在前在后. key也是一个回调函数,原型是:key(x), 这函数只有一个参数,是可迭代对象的元素,它的意图是通过该函数返回一个可比较的值,然后就不必通过函数来处理,直接比较就行了.因为元素可能是一个对象或其他复杂类型,不

python 列表排序方法reverse、sort、sorted基础篇

python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序

python 自定义排序函数

自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1.如果 x 和 y 相等,返回 0. 因此,如果我们要实现倒序排序,只需要编写一个reversed_c