python 排序 sorted 如果第一个条件 相同 则按第二个条件排序

举报
风吹稻花香 发表于 2021/06/04 23:32:23 2021/06/04
【摘要】 python 排序 sorted 如果第一个条件 相同 则按第二个条件排序 怎样遍历一个list  符合下列条件1. 按照元组的第一个从小到大排序2. 如果第一个相同  则按照元组第2个从大到小 排序 a = [[2,3],[4,1],(2,8),(2,1),(3,4)]b = sorted(a...
python 排序 sorted 如果第一个条件 相同 则按第二个条件排序

怎样遍历一个list  符合下列条件

1. 按照元组的第一个从小到大排序
2. 如果第一个相同  则按照元组第2个从大到小 排序

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


 

  1. = [[2,{'a':8}],[4,{'a':1}],(2,{'a':8}),(2,{'a':1}),(3,{'a':4})]
  2. array = [7,8]
  3. def fun(x):
  4.     return (-x[0],x[1].get('a'))
  5. = sorted(a,key=fun)
  6. print b

 

性能这玩意还是要用数据说话

  1. import time

  2. = xrange(1000000)
  3. = zip(n, n)

  4. start = time.time()
  5. x.sort(key = lambda x: (x[0], -x[1]))
  6. end = time.time()
  7. print 'key', end-start

  8. = zip(n, n)
  9. start = time.time()
  10. x.sort(cmp=lambda x, y: x[0] - y[0] or y[1] - x[1])
  11. end = time.time()
  12. print 'cmp', end-start
输出:

  1. key 2.34500002861 cmp 0.269000053406

key的代码确实优雅些,但不管从直观上,还是实测结果,都看不出来key更快。

如果逆序不能前面加个 '-'  来解决 , 可以用下面的办法  例如: 排序的是个字符串

  1. class Reversinator(object):
  2.     def __init__(self, obj):
  3.         self.obj = obj
  4.     def __lt__(self, other):
  5.         return other.obj < self.obj

  6. = [(2,'3'),(4,'1'),(2,'8'),(2,'1'),(3,'4')]

  7. print sorted(a, key=lambda x: (x[0], Reversinator(x[1])))

补充:

python本身提供了排序功能,其排序算法是稳定的,即key相等的两项在排序后的先后次序不变

下面通过list.sort来演示一下如何通过key函数来进行自定义的排序

所谓的key函数,就是以参加排序的每一项作为输入,而输出则为用来排序的key
 

  1. #python list 排序 

  2.    

  3. def my_key1(x): 

  4.     return x % 10 

  5. aList = [4, 5, 1, 2, 12, 34, 56, 9 ,80] 

  6. aList.sort() #默认按升序排列 

  7. print(aList) 

  8. aList.sort(reverse = True) #按降序排列 

  9. print(aList) 

  10. aList.sort(key = my_key1) #根据key函数,按照个位数进行升序排列 

  11. print(aList) 

  12.     

  13. def my_key2(x): 

  14.     return x[1] 

  15. aList = [(4,'ab'), (56,'c'), (1,'bb'), (102, 'a')] 

  16. aList.sort(key = my_key2) #按照每个元组的第2分量,即字符串排序 

  17. print(aList)
原文: http://blog.chinaunix.net/xmlrpc.php?id=3140368&r=blog/article&uid=429659

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/80183361

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。