• Python学习笔记:sort和sorted实现排序之对比


    总的来说,sort 是应用在列表上的方法,修改原始列表。

    内建函数 sorted 可对所有可迭代的对象进行排序操作,返回新的对象。

    list.sort() 方法效率会比 sorted(iter) 稍微高些。

    一、sort函数

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

    列表才可以进行修改,元组无法修改。

    1.语法

    list.sort(cmp=None, key=None, reverse=False)
    # cmp参数在python2.0中存在
    # 3.0版本已删除
    

    2.参数

    cmp -- 可选 使用该参数方法进行排序
    key -- 用来进行比较的元素 取自可迭代对象
    reverse -- 排序规则
    	reverse=True -- 降序
        reverse=False -- 升序(默认)
    

    该方法对原始列表进行排序,无返回。

    3.实操

    # 升序
    aList = [5, 4, 1, 3, 6, 2]
    aList.sort() # [1, 2, 3, 4, 5, 6]
    
    # 降序
    aList = [5, 4, 1, 3, 6, 2]
    aList.sort(reverse=True)
    aList # [6, 5, 4, 3, 2, 1]
    
    # 指定元素排序
    # 获取列表第2个元素
    def takeSecond(elem):
        return elem[1]
    # 列表
    random = [(2, 2), (3, 4), (4, 1), (1, 3)]
    
    random.sort(key=takeSecond)
    random # [(4, 1), (2, 2), (1, 3), (3, 4)]
    
    # 按长度
    x = ['a', 'bbb', 'cc']
    x.sort(key=len)
    print(x) # ['a', 'cc', 'bbb']
    
    # 自定义比较函数
    def comp(x, y):
        if x < y:
            return 1
        elif x > y:
            return -1
        else:
            return 0
    
    aList = [5, 4, 1, 3, 6, 2]
    aList.sort(comp) # 降序  2.0版本才支持
    # 测试的当前版本不支持
    

    4.其他技巧

    生成一个排序好的副本,以及原始列表不变。

    # 方法一
    aList = [5, 4, 1, 3, 6, 2]
    bList = aList[:]  # 深度copy
    # bList = aList.copy()
    bList.sort()
    print(aList) # [5, 4, 1, 3, 6, 2]
    print(bList) # [1, 2, 3, 4, 5, 6]
    
    # 方法二 使用sorted
    aList = [5, 4, 1, 3, 6, 2]
    bList = sorted(aList) # [1, 2, 3, 4, 5, 6]
    

    通过切片操作进行拷贝,不可简单的进行赋值,否则指向的还是同一个存储地址的列表。

    二、sorted函数

    sorted() 函数对所有可迭代的对象进行排序操作。

    1.语法

    sorted(iterable, key=None, reverse=False)
    

    2.参数

    iterable -- 可迭代对象
    key -- 指定可迭代对象中的一个元素
    reverse -- 排序规则 降序、升序
    

    该函数返回重新排序的列表,注意返回的都是列表

    3.实操

    # 默认排序
    a = [5, 2, 3, 1, 4]
    sorted(a) # [1, 2, 3, 4, 5]
    
    # 字典
    b = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
    sorted(b) # [1, 2, 3, 4, 5]
    # 按key排序,同时将key返回为一个列表
    
    # 按键排序
    sorted(b.items(), key=lambda x: x[0])
    
    # 按值长度排序
    sorted(b.items(), key=lambda x: len(x[1]))
    

    4.其他

    # 奖牌排行
    s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
    stodata = s.split('\n', -1)
    para = {}
    for line in range(len(stodata)):
        data = stodata[line].split(' ')
        print(data)
        para[data[0]] = [int(i) for i in data[1:]]
    
    new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
    

    参考链接:Python List sort()方法

    参考链接:python中的sort方法使用详解

    参考链接:python的sort()函数详解

    参考链接:Python3 sorted() 函数

    参考链接:python中sorted是什么

  • 相关阅读:
    Hausdorff distance between mesh and its symmertic one.
    Fast algorithm to compute minimum volume oriented bounding box
    C++文件读写详解(ofstream,ifstream,fstream)
    libCURL开源库在VS2010环境下编译安装,配置详解
    VPB和OSGGIS安装
    OpenSceneGraph 笔记--如何导出三角形数据
    OpenGL编程指南(第七版)
    osgAnimation例子的注释的注释
    osg 示例程序解析之osgdelaunay
    VS2010+64+OSG3.2.1之五Plugins dae编译
  • 原文地址:https://www.cnblogs.com/hider/p/15815951.html
Copyright © 2020-2023  润新知