精华内容
下载资源
问答
  • python列表排序

    2015-08-10 09:27:07
    python列表排序  简单记一下python中List的sort方法(或者sorted内建函数)的用法。  关键字:  python列表排序 python字典排序 sorted  List的元素可以是各种东西,字符串,字典,自己定义的类等。...
    python列表排序 

    简单记一下python中List的sort方法(或者sorted内建函数)的用法。 

    关键字: 
    python列表排序 python字典排序 sorted 


    List的元素可以是各种东西,字符串,字典,自己定义的类等。 

    sorted函数用法如下: 
    Python代码  收藏代码
    1. sorted(data, cmp=None, key=None, reverse=False)  

    其中,data是待排序数据,可以使List或者iterator, cmp和key都是函数,这两个函数作用与data的元素上产生一个结果,sorted方法根据这个结果来排序。 
    cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数. 
    key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素. 
    通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次. 

    通过例子来说明sorted的用法: 

    1. 对由tuple组成的List排序 
    Python代码  收藏代码
    1. >>> students = [('john''A'15), ('jane''B'12), ('dave''B'10),]  


    用key函数排序(lambda的用法见 注释1) 
    Python代码  收藏代码
    1. >>> sorted(students, key=lambda student : student[2])   # sort by age  
    2. [('dave''B'10), ('jane''B'12), ('john''A'15)]  


    用cmp函数排序 
    Python代码  收藏代码
    1. >>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) # sort by age  
    2. [('dave''B'10), ('jane''B'12), ('john''A'15)]  


    用 operator 函数来加快速度, 上面排序等价于:(itemgetter的用法见 注释2) 
    Python代码  收藏代码
    1. >>> from operator import itemgetter, attrgetter  
    2. >>> sorted(students, key=itemgetter(2))  


    用 operator 函数进行多级排序 
    Python代码  收藏代码
    1. >>> sorted(students, key=itemgetter(1,2))  # sort by grade then by age  
    2. [('john''A'15), ('dave''B'10), ('jane''B'12)]  



    2. 对由字典排序 
    Python代码  收藏代码
    1. >>> d = {'data1':3'data2':1'data3':2'data4':4}  
    2. >>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)  
    3. [('data4'4), ('data1'3), ('data3'2), ('data2'1)]  


    注释1 
    参考:http://jasonwu.me/2011/10/29/introduce-to-python-lambda.html 

    注释2 
    参考:http://ar.newsmth.net/thread-90745710c90cf1.html 
    class itemgetter(__builtin__.object) 
    |  itemgetter(item, ...) --> itemgetter object 

    |  Return a callable object that fetches the given item(s) from its operand. 
    |  After, f=itemgetter(2), the call f(r) returns r[2]. 
    |  After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3]) 

    相当于 
    Python代码  收藏代码
    1. def itemgetter(i,*a):   
    2.     def func(obj):   
    3.         r = obj[i]   
    4.         if a:   
    5.             r = (r,) + tuple(obj[i] for i in a)   
    6.         return r   
    7.     return func   
    8.   
    9. >>> a = [1,2,3]   
    10. >>> b=operator.itemgetter(1)   
    11. >>> b(a)   
    12. 2   
    13. >>> b=operator.itemgetter(1,0)   
    14. >>> b(a)   
    15. (21)   
    16. >>> b=itemgetter(1)   
    17. >>> b(a)   
    18. 2   
    19. >>> b=itemgetter(1,0)   
    20. >>> b(a)   
    21. (21)   
    展开全文
  • python 列表排序

    2018-04-27 11:53:56
    今天,我们一起看一下python中关于列表排序的一些知识。 有些时候我们希望对列表进行排序后,列表可以保存我们排序后的结果,但是很多情况下我们只是希望通过列表的排序,临时的显示排序结果而已。所以对于列表的...

    在我们实际使用中,对于列表的操作是十分常见的。对于列表的数据,在很多特殊的情况下我们需要对列表内的数据进行排列以达到我们特定的显示需求。今天,我们一起看一下python中关于列表排序的一些知识。

    有些时候我们希望对列表进行排序后,列表可以保存我们排序后的结果,但是很多情况下我们只是希望通过列表的排序,临时的显示排序结果而已。所以对于列表的排序可以分为永久性的排序和临时性的排序。

    sort()
    sort()函数可以轻松的对列表进行排序。还是以上篇出现的列表为例。我们希望对成员列表通过名字的字母顺序进行排序。

    
    #group members
    group_members = ["zhangsan","lisi","wangwu","zhaoliu"];
    print(group_members);
    
    group_members.sort();
    
    print(group_members);print(group_members);

    现在我们看下经过排序后列表的变化:

    ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
    ['lisi', 'wangwu', 'zhangsan', 'zhaoliu']

    列表经过sort排序后,其内的数据结构永久性的发生变化。

    当然了,我们还可以对其进行反向排序,这里我们的使用sort的一个参数(reverse=true).

    def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...)

    下面我们按照字母的逆序进行排序:

    group_members.sort(reverse=True);

    其他不变,只是修改传入sort函数的参数。

    ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
    ['zhaoliu', 'zhangsan', 'wangwu', 'lisi']
    

    结果也是永久性的改变,字母数序是按照字母表的逆序来排列。

    当然了,不是所有情况下我们都需要永久性的修改列表,python同样提供了临时修改列表的方法。

    sorted()
    sorted函数保留了原来列表的排列顺序,同时又以特定的顺序呈现它们,该函数能够让我们以特定的方式显示列表内容同时又不改变列表的原始排列顺序。

    #group members
    group_members = ["zhangsan","lisi","wangwu","zhaoliu"];
    print(group_members);
    print(sorted(group_members));

    输出:

    ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
    ['lisi', 'wangwu', 'zhangsan', 'zhaoliu']
    
    

    这里同样可以对其进行反向排序。使用方法和sort函数相同,使用reverse=True参数。

    print(sorted(group_members,reverse=True));

    反转列表

    假如我们在列表内存储了我们最近一年内买的所有书籍,并且是根据购买书籍的顺序存入列表中的,有一天你突然想看下最近购买的书籍,并且你希望是购买书籍的时间距离现在越近,那么它的顺序就排在前面。

    那么现在我们该怎么办呢?当然了,学习过编程的朋友可能会说,使用一个循环反向打印列表就好了,可是到现在我们还没有学习怎么使用循环语句。有没有现成的方法能够帮助我们解决这个问题呢?

    当然有,python提供了一个名为reverse的函数,该函数可以反转列表的排列顺序,这里的改变是永久性的。当然了,你可以很方便的还原原始顺序,再使用一次reverse就好了。

    #group members
    group_members = ["zhangsan","lisi","wangwu","zhaoliu"];
    
    print(group_members);
    #reverse array
    group_members.reverse()
    print(group_members);
    group_members.reverse()
    print(group_members);
    

    输出:

    ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
    ['zhaoliu', 'wangwu', 'lisi', 'zhangsan']
    ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
    

    可以看到经过两次反转后列表又是我们的原始列表了。

    这里我们在说一下len()函数,通过这个函数我们可以方便的获取列表的长度。

    #group members
    group_members = ["zhangsan","lisi","wangwu","zhaoliu"];
    
    #print group members
    print(len(group_members));

    输出:

    4

    当然了,与列表相关的函数有很多,我们就不一一介绍,等我们碰到的时候在细说。

    展开全文
  • Python列表排序

    2016-11-26 13:22:42
    Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]). 其中: cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 , 0: e1 == e2, 正数: e1 > e2...

    在 Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).
    其中:
    cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.
    key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.
    reverse 是一个布尔值, 表示是否反转比较结果.

    我以前在做比较复杂的排序时, 喜欢写一个定制的 cmp 函数. 当我看了 Python 文档后, 发现我的做法是不好的. 简单说明如下:

        1, 通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.  
        也就是说, 同等情况下, 写 key 函数比写 cmp 函数要高效很多.  
    
        2, 对一些貌似比较复杂的排序, 也是不需要写 cmp 函数的, 举例如下:  
        >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]  
    
        用元素索引做 key:  
        >>> sorted(students, key=lambda student: student[2])   # sort by age  
        [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]  
    
        用元素已经命名的属性做 key:  
        >>> sorted(students, key=lambda student: student.age)   # sort by age  
        [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]  
    
        用 operator 函数来加快速度, 上面两个排序等价于:  
        >>> from operator import itemgetter, attrgetter  
        >>> sorted(students, key=itemgetter(2))  
        >>> sorted(students, key=attrgetter('age'))  
    
        用 operator 函数进行多级排序, 这个就是比较复杂的应用. 按我以前的理解, 是一定要写个定制的 cmp 函数的. 现在看来, 以前真的够笨.  
        # sort by grade then by age  
        >>> sorted(students, key=itemgetter(1,2))  
        [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]  
        >>> sorted(students, key=attrgetter('grade', 'age'))  
        [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]  
    
        3, 根据字典值排序  
        >>> d = {'a':2, 'b':23, 'c':5, 'd':17, 'e':1}  
    
        #1, 返回 pair 对:  
        from operator import itemgetter  
        >>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)  
        [('b', 23), ('d', 17), ('c', 5), ('a', 2), ('e', 1)]  
    
        #2, 仅返回 keys:  
        >>> sorted(d, key=d.__getitem__, reverse=True)  
        ['b', 'd', 'c', 'a', 'e']  
    
        4, sorted() 会返回一个新的已经排好序的 list.  
        list.sort() 是就地排序, 以节约空间, 当然就不会返回一个排好序的新的 list 了. 这对大的 list 排序是有空间优势的.  
    展开全文
  • 关于Python列表排序

    2020-12-21 10:25:07
    关于Python列表排序 sort排序方法 ​ 这个方法可以对列表元素进行排列(默认正向排序),排序后生成的新列表会对原列表进行覆盖(但其id不变),所以sort排序方法会直接修改原列表的排序。 a =[1,3,787,33,86,99] a...
  • 3.1 列表是什么列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表...在Python中,用方括号([] )来表示列表,并用逗号来分隔其中的元素。下面是一个简单的列...

    3.1 列表是什么

    列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有 任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复数的名称(如letters 、digits 或names )是个不错的主意。

    在Python中,用方括号([] )来表示列表,并用逗号来分隔其中的元素。下面是一个简单的列表示例,这个列表包含几种自行车:

    开始上手

    bicycles = ['trek','cannondale','redline','specialized']print(bicycles)

    运行结果:

    但是这种直接输出很明显是不行的,多数情况下我们需要获取列表的元素进行输出。

    3.1.1访问列表元素

    要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。 索引就是该元素在列表中的位置标识,从0开始。

    比如我们从刚才的bicycles列表中提取第一款自行车:

    bicycles = ['trek','cannondale','redline','specialized']#print(bicycles)#提取列表元素print(bicycles[0])这个列表中的元素是字符串,我们还可以复习一下上次的内容,把它的首字母大写:bicycles = ['trek','cannondale','redline','specialized']#print(bicycles)#提取列表元素,首字母大写print(bicycles[0].title())

    运行结果:

    3.1.2 索引从0而不是1开始

    在Python中,第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。

    比如我们要访问索引1和3处的自行车:

    #访问索引1和3处的自行车print(bicycles[1])print(bicycles[3])

    运行结果:

    3.1.3 使用列表中的各个值

    像使用各种变量一样,你可以使用列表中的元素来创建消息:

    #使用元素创建消息message = "My first bicycle was a " + bicycles[0].title() + "."print(message)

    3.2 修改、添加、删除列表元素

    你创建的大多数列表都将是动态的,这意味着列表创建后,将随着程序的运行增删元素。

    3.2.1 修改列表元素

    修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。 例如,假设有一个摩托车列表,其中的第一个元素为’honda’ ,如何修改它的值呢?

    motorcycles = ['honda','yamaha','suzuki']print(motorcycles)#修改列表元素motorcycles[0] = 'ducati'print(motorcycles)

    运行结果:

    3.2.2 在列表中添加元素

    1.在列表末尾添加元素

    还用上面的摩托车列表,添加新元素’ducati’

    #末尾添加列表元素motorcycles.append('ducati')print(motorcycles)

    运行结果:

    append()方法可以用来动态创建列表,下面来创建一个空列表,再在其中添加元素’honda’ 、’yamaha’ 和’suzuki’。

    #动态创建列表motorcycles_new = []motorcycles_new.append('honda')motorcycles_new.append('yamaha')motorcycles_new.append('suzuki')print(motorcycles_new)

    运行结果:

    使用方法insert() 可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。

    #插入元素motorcycles_new.insert(0,'ducati')print(motorcycles_new)

    运行结果:

    我们在列表开头加入了元素ducati

    3.2.3 在列表中删除元素

    1.使用del语句删除元素

    如果知道要删除的元素在列表中的位置,可使用del 语句。

    下面举例删除motorcycles中的第一个元素:

    #del删除元素del motorcycles[0]print(motorcycles)

    运行结果:

    del删除列表元素后,你就无法再访问它了。

    2.使用pop()删除元素

    有时候,你要将元素从列表中删除,并接着使用它的值。

    方法pop() 可删除列表末尾的元素,并让你能够接着使用它。术语弹出 弹出 (pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。下面从列表motorcycles_new 中弹出一款摩托车:

    #pop删除元素poped_motorcycles_new = motorcycles_new.pop()print(motorcycles_new)print(poped_motorcycles_new)

    运行结果:

    我们发现pop()方法从列表尾部弹出了元素

    3.弹出列表中任意位置的元素

    实际上,你可以使用pop() 来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可。

    下面演示一下弹出motorcycles_new中的第2个元素,并打印出来

    #pop弹出任意位置的元素favorite_motor = motorcycles_new.pop(1)print("My favorite motorcycle is" + favorite_motor)

    4.根据值删除元素

    有时候,你不知道要从列表中删除的值所处的位置。如果你只知道要删除的元素的值,可使用方法remove() 。

    例如,假设我们要从列表motorcycles 中删除值’ducati’ 。

    #remove根据值删除元素motorcycles.remove('ducati')print(motorcycles)

    运行结果:

    使用remove() 从列表中删除元素时,也可接着使用它的值。下面删除值’ducati’ ,并打印一条消息,指出要将其从列表中删除的原因:

    too_expensive = 'ducati'motorcycles.remove(too_expensive)print(motorcycles)print("\nA " + too_expensive.title() + " is too expensive for me.")

    运行结果:

    3.3 组织列表

    在你创建的列表中,元素的排列顺序常常是无法预测的,因为你并非总能控制用户提供数据的顺序。这虽然在大多数情况下都是不可避免的,但你经常需要以特定的顺序呈现信息。

    有时候,你希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。Python提供了很多组织列表的方式,可根据具体情况选用。

    3.3.1 使用sort()方法对列表进行永久性排序

    Python方法sort() 让你能够较为轻松地对列表进行排序,但是排序的结果是永久的,不可改变。假设你有一个汽车列表,并要让其中的汽车按字母顺序排列。为简化这项任务,我们假设该列表中的所有值都是小写的。

    下面的例子用sort()方法对列表进行排序:

    #sort排序列表cars = ['bmw','audi','toyota','subaru']cars.sort()print(cars)

    运行结果:

    你还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort() 方法传递参数reverse=True 。下面的示例将汽车列表按与字母顺序相反的顺序排列:

    #sort倒序排序列表cars = ['bmw','audi','toyota','subaru']cars.sort(reverse=True)print(cars)

    3.3.2 使用函数sorted() 对列表进行临时排序

    要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted() 。函数sorted() 让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。

    #sorted临时排序cars = ['bmw','audi','toyota','subaru']print("Here is the original list:")print(cars)print("\nHere is the sorted list:")print(sorted(cars))print("\nHere is the original list again:")print(cars)

    运行结果:

    3.3.3倒着打印列表

    要反转列表元素的排列顺序,可使用方法reverse() 。假设汽车列表是按购买时间排列的,可轻松地按相反的顺序排列其中的汽车:

    #reverse反转列表cars = ['bmw','audi','toyota','subaru']print(cars)cars.reverse()print(cars)

    运行结果:

    方法reverse() 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse() 即可。

    3.3.4确定列表的长度

    使用函数len() 可快速获悉列表的长度。在下面的示例中,列表包含4个元素,因此其长度为4:

    #使用len()确定列表的长度cars = ['bmw','audi','toyota','subaru']print(len(cars))

    运行结果:

    3.4使用列表时避免索引错误

    刚开始使用列表时,经常会遇到一种错误。假设你有一个包含三个元素的列表,却要求获取第四个元素:

    #避免索引错误cars = ['bmw','audi','toyota']print(cars[3])

    运行结果:

    提示索引超出范围

    一定要记得列表的索引是从0开始的!!!

    索引-1总是返回最后一个列表元素:

    #返回最后一个元素cars = ['bmw','audi','toyota']print(cars[-1])

    运行结果:

    3.5 总结

    在本章中,你学习了:

    列表是什么

    如何使用其中的元素

    如何定义列表以及如何增删元素

    如何对列表进行永久性排序

    如何为展示列表而进行临时排序

    如何确定列表的长度

    在使用列表时如何避免索引错误

    展开全文
  • python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。reverse()方法将列表中元素反转排序,例:l=[4,...
  • python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。reverse()方法将列表中元素反转排序,比如下面...
  • python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。reverse()方法将列表中元素反转排序,比如下面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,294
精华内容 3,717
关键字:

python列表排序

python 订阅