前言:

最开始是因为看到一道题目, 用一行代码解决[1, 2, 3, 11, 2, 5, 3, 2, 5, 3] 输出[11, 1, 2, 3, 5]

本来想法很简单,先去重后排序

但是遇到一个难点

用sorted排序的时候,无法使得11排在1后面

解决思路

第一版本的解决办法,我采用的是用两次排序(先按大小值排序,再按宽度逆向排序),但是这样显得很繁琐,这一行代码很长

再次查找资料,发现sorted的更多用法

最终采用了下面这个版本的解决办法

l = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3,12,13]
sorted(set(l),key=lambda i:[-len(str(i)),i]) # [11, 12, 13, 1, 2, 3, 5]

相关知识汇总:

sorted(*args, **kwargs)

官方注释是

'''

Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customize the sort order, and the

reverse flag can be set to request the result in descending order.

'''

翻译:返回一个新列表,其中包含按升序排列的iterable中的所有项。可以提供自定义键函数来定制排序顺序,还可以设置反转标志来按降序请求结果。

注释很简单,本来想查看源码确定一下这个函数的执行过程,但是水平有限,这条路暂时搁浅了,以下只是说说我对这个函数的理解,日后有更深的理解再更新。

sorted可以通过key值,传入一个函数,把原序列的每一个元素,带入函数中,由函数结果进行排序。

key=lambda i:[-len(str(i)),i]

创建一个匿名函数,输入变量为i,原序列set(l)中每一个元素带入i值

因为set()是集合,是无序的,就假设第一个值为“1”,lambda i:[-len(str(i)),i]的结果为[-1,1]

第二个值为“11”,lambda i:[-len(str(i)),i]的结果为[-2,11]

第三个值为“2”,lambda i:[-len(str(i)),i]的结果为[-1,2]

……

之后对[-1,1]、[-2,11]、[-1,2]……进行排序,因为没有设置反转标志,所以默认从小到大排序。则-2排在-1前面,达到宽度越大排序越前的要求。[-2,11]在[-1,2]和[-1,1]前面,再比对后一位,如1<2,则[-1,1]会在[-1,2]前面。因此最后的排序结果为[-2,11]->[-1,1]->[-1,2],也就是11->1->2,其他数值以此类推进行排序

之后看到大佬的解决方法,更简洁,就此记录:

[list(set(L))[i] for i in range(-1,4)]

python sorted() 多重排序的更多相关文章

  1. 关于Python的多重排序

    Python预置的list.sort().sorted()方法可实现各种数组的排序,但支持的只限于一个key,如果要多重排序,目前所知的方法只有自定义了. Help on built-in funct ...

  2. Python复杂多重排序

    1. cmp函数是python自带的函数,用于比较两个参数哪个大哪个小 print cmp(2, 3) # -1 如果第一个参数比第二个小,就返回-1,两个元素相等,返回0,否则返回1 2.所以就可以 ...

  3. python sorted排序

    python sorted排序 Python不仅提供了list.sort()方法来实现列表的排序,而且提供了内建sorted()函数来实现对复杂列表的排序以及按照字典的key和value进行排序. s ...

  4. python sorted排序用法详解

    sorted排序 python sorted 排序 1. operator函数在介绍sorted函数之前需要了解一下operator函数. operator函数是python的内置函数,提供了一系列常 ...

  5. 【Python】 sort、sorted高级排序技巧

    文章转载自:脚本之家 这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Pyth ...

  6. python sort、sorted高级排序技巧(转)

    add by zhj: 没找到原文.可以按多个维度进行排序,而且可以指定他们的排序方向,如果维度都是数字,排序比较容易,用+/-号就可以 指定排序方向.否则,就调用多次sorted进行排序了,而且要按 ...

  7. 深入Python(1): 字典排序 关于sort()、reversed()、sorted()

    http://www.cnblogs.com/BeginMan/p/3193081.html 一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠 ...

  8. 【转载】 python sort、sorted高级排序技巧

    这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Python list内置so ...

  9. Python:如何排序(sort)

    一.前言 对Python的列表(list)有两个用于排序的方法: 一个是内建方法list.sort(),可以直接改变列表的内容: >>> list1 = [9,8,7,6,5] &g ...

  10. python sorted和sort

    我们需要对List进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序(从2.4开始) ...

随机推荐

  1. git---全局设置用户名、密码、邮箱

    # git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址. # 1.查看git配置信息 $ ...

  2. java读取apk、ipa包名、版本名、版本号等信息

    package com.gymexpress.exerciseservice.controller;import com.gymexpress.commonmodel.controller.BaseC ...

  3. 比Everything更强的文件搜索工具,支持文件名、文件内容和文件图片上的文字搜索,文件内容搜索工具,文件图片内容搜索工具,OCR图片文本识别搜索,文件快速搜索工具,文字识别文件搜索工具

    Windows自带的文件搜索功能想必不需要过多吐槽,搜索速度简直是在龟爬,所以小编很早之前就在用Everything进行文件搜索了, 不过,今天的主角不是它,而是比它更更更更更强的一款软件! 这款软件 ...

  4. springboot文件流下载

    1. 将文件以流的形式一次性读取到内存,通过响应输出流输出到前端 /** * @param path 想要下载的文件的路径 * @param response * @功能描述 下载文件: */ @Re ...

  5. javawebServlet

    javaweb http响应 服务器 -- 响应 -- 客户端 Accept:告诉浏览器它所支持的数据类型 Accept-Encoding:支持那种 编码格式 GBK UTF-8 GB2312 ISO ...

  6. 【GENERAL FRAMEWORK】总框架——持续更新

    引: 鉴于目前挖的坑较多,未防止某些即将长期更新的博文出现烂尾,特设此框架 1.蓝桥杯(完结)         1.[蓝桥杯单片机组]LED.蜂鸣器与继电器--138-573的外设操作         ...

  7. db2 linux创建用户后,登录报错

    db2的数据库服务器, 创建用户及授权参考 https://blog.csdn.net/qq_24805831/article/details/102590084 按照步骤创建用户后,连接数据库报错: ...

  8. Bert使用

    首先打开网址:https://huggingface.co/models 下载想用的模型

  9. java心形打印999

    心形打印999 农历七月初七,七夕节也就是中国民间版的所谓情人节,利用java打印心型999个图案可以让程序员更浪漫一些.现在下面由小编简要的说一下如何做到.首先下面是打印心形但却不是999个的代码, ...

  10. 用swift开发framework时采用OC混编的解决方案

    随着swift ABI的稳定,越来越多的开发者开始使用swift语言开发项目,但是由于大部分工具库也还是使用OC写的,因此我们不得不需要在项目中采用swift与oc混编. 在开发app项目时,swif ...