python list.sort()根据多个关键字排序的方法实现

目录
  • 前言:
  • 另一用法
  • sort 与 sorted 区别:

前言:

加入我需要对如下几个文件按照从下到大排序,可是他的关键字有多个应该怎么办了?

例如我希望005开头在006和007的前面,然后005内部我希望12排在15前面

005x12.jpg
006x01.jpg
007x03.jpg
005x15.jpg
007x10.jpg
006x04.jpg

解决方法:

利用list.sort()中的多个关键字排序功能,先按照key1排序,再按照key2排序

list.sort(key=lambda x: (key1, key2))

例如

filename=[005x12.jpg, 006x01.jpg, 007x03.jpg, 005x15.jpg, 007x10.jpg, 006x04.jpg]
filename.sort(key=lambda x: (int(x[2]), int(x[4: -4]))
for i in len(filename):
 print(i)

结果如下:

005x12.jpg
005x15.jpg
006x01.jpg
006x04.jpg
007x03.jpg
007x10.jpg

排序完成

另一用法

我需要对a按照正在前,负在后,并且绝对值从小到大排序

a = [4, 2, 1, 3, -1, -8, -3, -2]
a.sort(key=lambda x: (x<0, abs(x)))
print(a)

输出为:

[1, 2, 3, 4, -1, -2, -3, -8]

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

sorted 语法:

sorted(iterable[, cmp[, key[, reverse]]])

参数说明:

  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

python的sorted的使用方法:

>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]

>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

 补充点小知识:

1、{{ value|add:10 }} #value =5 则返回15
2、{{ value|add:-10 }} #加一个负数,也相当于减去。
3、{% widthratio 5 1 100 %} #这段代码表示:5/1*100,返回500,widthratio需要三个参数,他会使用参数1/参数2*参数3
#如果要进行乘法操作的话,可将参数1等于参数2即可。

到此这篇关于python list.sort()根据多个关键字排序的方法实现的文章就介绍到这了,更多相关python list.sort()关键字排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python sorted对list和dict排序

    sorted语法 sorted(iterable, key=None, reverse=False) 参数说明: - iterable -- 可迭代对象.  - key --主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序.  - reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认). 返回:  - 一个新list对象 sorted对字典dict排序 ①按键key排

  • python中List的sort方法指南

    简单记一下python中List的sort方法(或者sorted内建函数)的用法. List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, cmp=None, key=None, reverse=False) 其中,data是待排序数据,可以使List或者iterator, cmp和key都是函数,这两个函数作用与data的元素上产生一个结果,sorted方法根据这个结果来排序. cmp(e1, e2) 是带两个参数的比较函数, 返回值

  • Python列表排序 list.sort方法和内置函数sorted用法

    很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别. 一.list.sort方法 list.sort方法会就地排序列表,也就是说不会把原列表复制一份.这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表. 在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那

  • python list.sort()根据多个关键字排序的方法实现

    目录 前言: 另一用法 sort 与 sorted 区别: 前言: 加入我需要对如下几个文件按照从下到大排序,可是他的关键字有多个应该怎么办了? 例如我希望005开头在006和007的前面,然后005内部我希望12排在15前面 005x12.jpg 006x01.jpg 007x03.jpg 005x15.jpg 007x10.jpg 006x04.jpg 解决方法: 利用list.sort()中的多个关键字排序功能,先按照key1排序,再按照key2排序 list.sort(key=lambd

  • python实现忽略大小写对字符串列表排序的方法

    本文实例讲述了python实现忽略大小写对字符串列表排序的方法,是非常实用的技巧.分享给大家供大家参考.具体分析如下: 先来看看如下代码: string = ''' the stirng Has many line In THE fIle jb51 net ''' list_of_string = string.split() print list_of_string #将字符串分离开,放入列表中 print '*'*50 def case_insensitive_sort(liststring

  • python实现对象列表根据某个属性排序的方法详解

    本文实例讲述了python实现对象列表根据某个属性排序的方法.分享给大家供大家参考,具体如下: 对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的情况下,需要自己选择特定的排序,也就是根据某一个具体的属性来排序,在网上找了下资料,一般来说有两种方法,但从根本上来说,还是调用了list.sort 方法来实现.下面是简单的测试代码片段: #coding:utf-8 class Person: def __init__(self,name,age,

  • python使用sorted函数对列表进行排序的方法

    本文实例讲述了python使用sorted函数对列表进行排序的方法.分享给大家供大家参考.具体如下: python提供了sorted函数用于对列表进行排序,并且可以按照正序或者倒序进行排列 #创建一个数字组成的列表 numbers = [5, 1, 4, 3, 2, 6, 7, 9] #输出排序后的数字数组 print sorted(numbers) #输出原始数组,并未被改变 print numbers my_string = ['aa', 'BB', 'zz', 'CC', 'dd', "E

  • python 根据字典的键值进行排序的方法

    1.利用key排序 d = {'d1':2, 'd2':4, 'd4':1,'d3':3,} for k in sorted(d): print(k,d[k]) d1 2 d2 4 d3 3 d4 1 2.利用value排序:__getitem__ d = {'d1':2, 'd2':4, 'd4':1,'d3':3,} for k in sorted(d,key=d.__getitem__): print(k,d[k]) d4 1 d1 2 d3 3 d2 4 反序:reverse=True

  • 在Python中字典根据多项规则排序的方法

    我们做登录的时候经常会使用到,验证手机号是否正确.向手机发送验证码倒计时60s的问题,我们改如何解决呢?让我们一起来探讨一下吧.如下图: 首先,我们先说说判断手机号码是否正确的问题吧,我的想法是给字符串添加一个分类,然后写上这样的代码: + (BOOL)valiMobile:(NSString *)mobile{         if (mobile.length != 11){             //判断手机号码是否为11位             return NO;         

  • Python中sort和sorted函数代码解析

    本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sort(cmp=None, key=None, reverse=False) 函数作用: 它是把L原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序 参数说明: (1) cmp参数 cmp接受一个函数,拿整形举例,形式为: def f(a,b): return a-b 如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数:

  • Python使用sort和class实现的多级排序功能示例

    本文实例讲述了Python使用sort和class实现的多级排序功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- import random class Temp: def __init__(self, a, b, c): self.a = a self.b = b self.c = c def __str__(self): return ( ('[a: %d b: %d c: %d]' % (self.a, self.b, self.c))) def cmp

  • 详解python中sort排序使用

    1.前言 昨天一学妹问我一个关于python的问题,当时在外忙碌,没时间细看.今天看一下,咋一看我还真的不知道这个问题,bookinfo.sort(reverse=True ,key=lambda x:(x[1],x[1]/x[2]))是如何排序的.但是我猜测应该是按照第二个元素排序,如果第二个元素相同,就按照第二个元素和第三个元素的比值排序.猜测归猜测,自己就去测试了一下.过程如下. 2.环境准备 系统:win10 python版本:3.6 3.程序实现 为了满足实验要求,就设置几个第二个元素

  • Python数据结构与算法(几种排序)小结

    Python数据结构与算法(几种排序) 数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 对每一对相邻元素作同样的工作,从

随机推荐