菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python3 List sort()方法

Python3 列表 Python3 列表


描述

sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

语法

sort()方法语法:

list.sort( key=None, reverse=False)

参数

参数

  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。

返回值

该方法没有返回值,但是会对列表的对象进行排序。

实例

以下实例展示了 sort() 函数的使用方法:

实例

#!/usr/bin/pythonaList = ['Google', 'Runoob', 'Taobao', 'Facebook']aList.sort()print("List : ", aList)

以上实例输出结果如下:

List : ['Facebook', 'Google', 'Runoob', 'Taobao']

以下实例降序输出列表:

实例

#!/usr/bin/python# -*- coding: UTF-8 -*-# 列表vowels = ['e', 'a', 'u', 'o', 'i']# 降序vowels.sort(reverse=True)# 输出结果print('降序输出:', vowels)

以上实例输出结果如下:

降序输出: ['u', 'o', 'i', 'e', 'a']

以下实例演示了通过指定列表中的元素排序来输出列表:

实例

#!/usr/bin/python# 获取列表的第二个元素deftakeSecond(elem): returnelem[1]# 列表random = [(2, 2), (3, 4), (4, 1), (1, 3)]# 指定第二个元素排序random.sort(key=takeSecond)# 输出类别print('排序列表:', random)

以上实例输出结果如下:

排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]

Python3 列表 Python3 列表

AI 思考中...

7 篇笔记 写笔记

  1. #0

    teddy820

    154***[email protected]

    38
    list3 = ['a',10086,'wo',10010,]
    list3.sort()
    print(list3)

    输出结果显示错误:

    list3.sort()
    TypeError: '<' not supported between instances of 'int' and 'str'

    可见 sort 方法不适合 int 和 str 类型的比较。

    list1 = ['我','爱','python']
    list2 = [100, 200, 300,400,300]
    list1.sort()
    list2.sort()
    print(list1,list2)

    输出结果:

    ['python', '我', '爱'] [100, 200, 300, 300, 400]

    分别比较是可行的。

    对上面的代码稍作修改:

    list1 = ['我','爱','python',[1,2,3]]
    list1.sort()
    print(list1)

    输出结果也是错误的,显示 list 和 str 不能相互比较。

    teddy820

    154***[email protected]

    8年前 (2018年03月28日)
  2. #0
    115

    1.字符串排序

    def list_sort_string(): 
     list=["delphi","Delphi","python","Python","c++","C++","c","C","golang","Golang"] 
     list.sort() #按字典顺序升序排列 
     print("升序:",list) 
     
     list.sort(reverse=True) #按降序排列 
     print("降序:",list)

    排序结果:

    升序: ['C', 'C++', 'Delphi', 'Golang', 'Python', 'c', 'c++', 'delphi', 'golang', 'python'] 
    降序: ['python', 'golang', 'delphi', 'c++', 'c', 'Python', 'Golang', 'Delphi', 'C++', 'C']

    2.数值型排序

    def list_sort_number(): 
     list=[30,40,10,50,50.1,80,60,100,90] 
     list.sort() 
     print("升序:",list) 
     
     list.sort(reverse=True) 
     print("降序:",list)

    排序结果:

    升序: [10, 30, 40, 50, 50.1, 60, 80, 90, 100] 
    降序: [100, 90, 80, 60, 50.1, 50, 40, 30, 10]

    3.根据列表中类对象的属性排序

    class element(object): 
     def __init__(self,id="",name=""): 
     self.id=id 
     self.name=name 
     def __lt__(self, other): # override <操作符 
     if self.id<other.id: 
     return True 
     return False 
     
     def __str__(self): # override __str__ 
     return "id={0},name={1}".format(self.id,self.name) 
     
    def sort_by_attribute(): 
     list=[element(id="130",name="json"), 
     element(id="01",name="jack"),element(id="120",name="tom")] 
     list.sort() 
     for item in list: 
     print(item)

    由于 list.sort() 函数在排序时,使用的是小于号对比,所以自定义的数据类型需要 override __lt__(小于) 函数才能实现排序。

    根据 element 的 id 属性排序

    排序列的结果:

    id=01,name=jack 
    id=120,name=tom 
    id=130,name=json

    4.根据列表中元素的长度排序

    def list_sort_by_length(): 
     list=["delphi","Delphi","python","Python","c++","C++","c","C","golang","Golang"] 
     list.sort(key=lambda ele:len(ele)) #按元素长度顺序升序排列 
     print("升序:",list) 
     
     list.sort(key=lambda ele:len(ele),reverse=True) #按降序排列 
     print("降序:",list)

    借助于 lambda 表达式,计算 list 列表中的元素的长度,根据元素的长度进行排序。

    排序的结果:

    升序: ['c', 'C', 'c++', 'C++', 'delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang'] 
    降序: ['delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang', 'c++', 'C++', 'c', 'C']

    5.根据列表中元素的多个属性进行排序:

    def two_d_list_sort(): 
     list=[ ["1","c++","demo"], 
     ["1","c","test"], 
     ["2","java",""], 
     ["8","golang","google"], 
     ["4","python","gil"], 
     ["5","swift","apple"] 
     ] 
     list.sort(key=lambda ele:ele[0])# 根据第1个元素排序 
     print(list) 
     list.sort(key=lambda ele:ele[1]) #先根据第2个元素排序 
     print(list) 
     list.sort(key=lambda ele:ele[1]+ele[0]) #先根据第2个元素排序,再根据第1个元素排序 
     print(list)

    同样借助于 lambda 表达式完成,当然也可以定义一个与 labmda 具有相同意义的函数实现排序。

    排序结果:

    [['1', 'c++', 'demo'], ['1', 'c', 'test'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple'], ['8', 'golang', 'google']] 
    [['1', 'c', 'test'], ['1', 'c++', 'demo'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']] 
    [['1', 'c++', 'demo'], ['1', 'c', 'test'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']]

    6.动态的根据用户指定的索引进行排序:

    def two_d_list_sort2(sort_index="0,1,2"): # 动态的根据传入的元素索引进行排序 
     list=[ ["1","c++","demo"], 
     ["1","c","test"], 
     ["2","java",""], 
     ["8","golang","google"], 
     ["4","python","gil"], 
     ["5","swift","apple"] 
     ] 
     key_set="" 
     for item in sort_index.split(","): 
     key_set+="ele["+item+"]+" 
     key_set=key_set.rstrip("+") 
     list.sort(key=lambda ele:eval(key_set)) 
     print("排序索引:",sort_index,list) 
     
    if __name__=="__main__": 
     two_d_list_sort2("0") 
     two_d_list_sort2("1") 
     two_d_list_sort2("2") 
     two_d_list_sort2("1,0")

    有时候,在写代码之前,并不知道根据二维表的哪几列排序,而是在程序运行的时候根据输入或配置决定的,为了解决这个动态根据多个列或属性排序的问题,借助了 eval() 函数,eval() 函数能够把字符串编译成 python 代码并运行,从而达到动态根据多个列或属性排序的目的。

    排序结果:

    排序索引: 0 [['1', 'c++', 'demo'], ['1', 'c', 'test'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple'], ['8', 'golang', 'google']] 
    排序索引: 1 [['1', 'c', 'test'], ['1', 'c++', 'demo'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']] 
    排序索引: 2 [['2', 'java', ''], ['5', 'swift', 'apple'], ['1', 'c++', 'demo'], ['4', 'python', 'gil'], ['8', 'golang', 'google'], ['1', 'c', 'test']] 
    排序索引: 1,0 [['1', 'c++', 'demo'], ['1', 'c', 'test'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']]

    综上,基本总结了 list.sort 的使用的大部分场景,如下:

    • 1、默认排序
    • 2、根据类对象的单个属性进行排序,当然也可以扩展为根据类对象的多个属性进行排序
    • 3、根据元素的固有属性进行排序,如:长度、第N个元素等。为了简单,所以借助了 lambda 表达式,当然也可以使用普通函数代替 lambda 表达式
    • 4、动态的根据多个列进行排序,同时借助 lambdaeval() 函数实现

    可能还有一些场景没有涉及到,不过我相信,上面的几种情况可以满足90%以上的场景了,如果在使用中有问题欢迎留言交流。

    8年前 (2018年05月29日)
  3. #0

    独孤尚良

    yut***[email protected]

    11

    给楼上补充下:这个多列先后排序的问题。

    楼上给的排序方式是:各字符串元素串联起来。这个在各列元素的长度相同的情况下没问题,如果不等长,就有问题了。

    a= [ ["1","c++","demo"], 
     ["2","c","test"], 
     ["20","java",""], 
     ["8","golang","google"], 
     ["4","python","gil"], 
     ["5","swift","apple"] 
     ] 
    b= [ ["1","c++","demo"], 
     ["2","c","test"], 
     ["2","java",""], 
     ["8","golang","google"], 
     ["4","python","gil"], 
     ["5","swift","apple"] 
     ] 
    a.sort(key=lambda x:x[0]+x[1]+x[2])
    b.sort(key=lambda x:x[0]+x[1]+x[2])
    print(a,b)

    以上代码,a 和 b 的区别只在于 a[2][0] 和 b[2][0] 不同,但两者结果不同。

    这是不等长的导致的结果。

    独孤尚良

    yut***[email protected]

    8年前 (2019年01月30日)
  4. #0

    小白

    229***[email protected]

    36

    如果非要将列表里不同类型相比较,可以考虑如下方法:

    l = [-1, -3, 1, 0, 3, 'a', 'b', 'c']
    l.sort(key = str)
    print(l)

    排序结果:

    [-1, -3, 0, 1, 3, 'a', 'b', 'c']

    这里是利用 key 参数将数字全部转换为 str 类型后排序。

    小白

    229***[email protected]

    7年前 (2019年04月06日)
  5. #0

    会对全

    too***@yeah.net

    40

    二楼总结的很全面了,但对于多属性排序的方式有些问题。(这个问题三楼也提到了)

    这里总结一下多关键字排序的方法。

    a=['delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang', 'c++', 'C++', 'c', 'C']
    print(a)
    #按字典序升序排序
    a.sort() 
    print(a)
    #先按字符串长度升序排序,长度相同按字典序升序排序
    a.sort(key=lambda x:(len(x),x)) 
    print(a)
    #先按字符串长度升序排序,长度相同按字典序降序排序
    a.sort(key=lambda x:(len(x),list(map(lambda c:-ord(c),x)))) 
    print(a)
    #先按字符串长度降序排序,长度相同按字典序升序排序
    a.sort(key=lambda x:(-len(x),x))
    print(a)

    再举一例:

    a=[[1,3],[3,2],[2,4],[1,2],[1,5],[2,5]]
    print(a)
    #先按第一个元素升序排序,第一个元素相同按第二个元素升序排序
    a.sort()
    print(a)
    #先按第一个元素升序排序,第一个元素相同则保持原来的顺序
    a=[[1,3],[3,2],[2,4],[1,2],[1,5],[2,5]]
    a.sort(key=lambda x:x[0])
    print(a)
    #先按第二个元素升序排序,第二个元素相同则保持原来的顺序
    a=[[1,3],[3,2],[2,4],[1,2],[1,5],[2,5]]
    a.sort(key=lambda x:x[1])
    print(a)
    #先按第二个元素升序排序,第二个元素相同按第一个元素降序排序
    a.sort(key=lambda x:(x[1],-x[0]))
    print(a)

    会对全

    too***@yeah.net

    7年前 (2019年08月05日)
  6. #0

    蔡徐坤

    cai***[email protected]

    30

    在汉字、英文单词都存在的情况下,会优先对英文字母排序,然后再是汉字的首字母排序:

    name_list = ["唱", "跳", "rap", "篮球"]
    num_list = [1, 7, 6, 3, 10]
    '''
    #升序
    name_list.sort()
    #['rap', '唱', '篮球', '跳']
    num_list.sort()
    #[1, 3, 6, 7, 10]
    '''
    '''
    # 降序
    name_list.sort(reverse=True) 
    # ['跳', '篮球', '唱', 'rap']
    num_list.sort(reverse=True) 
    # [10, 7, 6, 3, 1]
    '''
    # 逆序(反转)
    name_list.reverse() 
    # ['篮球', 'rap', '跳', '唱']
    num_list.reverse() 
    # [10, 3, 6, 7, 1]
    print(name_list)
    print(num_list)

    蔡徐坤

    cai***[email protected]

    7年前 (2019年08月28日)
  7. #0

    kol2020

    194***[email protected]

    8

    字符串比较大小时,是每个相应的字符的Unicode编码进行比较,汉字的Unicode编码比所有英文字母和阿拉伯数字的Unicode编码都要大。

    id_num = ord('一')
    for i in range(10):
     ch = chr(id_num+i)
     print(ch, ord(ch))
    for i in range(10):
     ch = str(i)
     print(ch, ord(ch))
     
    id_num = ord('a')
    for i in range(10):
     ch = chr(id_num+i)
     print(ch, ord(ch))
     
    id_num = ord('A')
    for i in range(10):
     ch = chr(id_num+i)
     print(ch, ord(ch))

    运行结果如下:

    一 19968
    丁 19969
    丂 19970
    七 19971
    丄 19972
    丅 19973
    丆 19974
    万 19975
    丈 19976
    三 19977
    0 48
    1 49
    2 50
    3 51
    4 52
    5 53
    6 54
    7 55
    8 56
    9 57
    a 97
    b 98
    c 99
    d 100
    e 101
    f 102
    g 103
    h 104
    i 105
    j 106
    A 65
    B 66
    C 67
    D 68
    E 69
    F 70
    G 71
    H 72
    I 73
    J 74

    kol2020

    194***[email protected]

    6年前 (2020年03月06日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /