Python 排序(sorted)
来源:互联网 发布:rar解压软件官网 编辑:程序博客网 时间:2024/05/28 15:08
转载自:http://blog.csdn.net/hanshileiai/article/details/44241385
要实现的功能
遍历一个list,符合下列条件:
- 按照元组第一位的值从小到大排序
- 如果第一个相同,则按照元组第2位的值从大到小排序
实现一:
a = [[2,3],[4,1],(2,8),(2,1),(3,4)]b = sorted(a,key=lambda x: (x[0], -x[1]))print b
实现二:
a = [[2,{'a':8}],[4,{'a':1}],(2,{'a':8}),(2,{'a':1}),(3,{'a':4})]array = [7,8]def fun(x): return (-x[0],x[1].get('a'))b = sorted(a,key=fun)print b
性能这玩意还是要用数据说话
import timen = xrange(1000000)x = zip(n, n)start = time.time()x.sort(key = lambda x: (x[0], -x[1]))end = time.time()print 'key', end-startx = zip(n, n)start = time.time()x.sort(cmp=lambda x, y: x[0] - y[0] or y[1] - x[1])end = time.time()print 'cmp', end-start
输出:
key 2.34500002861 cmp 0.269000053406
key的代码确实优雅些,但不管从直观上,还是实测结果,都看不出来key更快。
如果逆序不能前面加个 ‘-’ 来解决 , 可以用下面的办法
例如: 排序的是个字符串
class Reversinator(object): def __init__(self, obj): self.obj = obj def __lt__(self, other): return other.obj < self.obja = [(2,'3'),(4,'1'),(2,'8'),(2,'1'),(3,'4')]print sorted(a, key=lambda x: (x[0], Reversinator(x[1])))
补充:
Python本身提供了排序功能,其排序算法是稳定的,即key相等的两项在排序后的先后次序不变
list.sort
下面通过list.sort
来演示一下如何通过key函数来进行自定义的排序
所谓的key函数,就是以参加排序的每一项作为输入,而输出则为用来排序的key
def my_key1(x): return x % 10 aList = [4, 5, 1, 2, 12, 34, 56, 9 ,80] aList.sort() #默认按升序排列 print(aList) aList.sort(reverse = True) #按降序排列 print(aList) aList.sort(key = my_key1) #根据key函数,按照个位数进行升序排列 print(aList) def my_key2(x): return x[1] aList = [(4,'ab'), (56,'c'), (1,'bb'), (102, 'a')] aList.sort(key = my_key2) #按照每个元组的第2分量,即字符串排序 print(aList)
阅读全文
0 0
- python dict sorted 排序
- python dict sorted 排序
- python dict sorted 排序
- python 排序sorted()
- Python - sorted 排序
- python sorted() 排序
- Python sorted() 高级排序
- python - sorted()排序
- python排序:sorted()
- Python 排序函数sorted
- python排序之sorted
- Python 排序(sorted)
- python dict sorted 排序
- python的排序 sort sorted
- python sort sorted 排序详解
- python sorted排序用法详解
- python sorted排序用法详解
- python的sorted 函数、python列表排序
- js定时器
- python:类是对象,通用对象的工厂
- Linux下sed命令使用二三事
- 计算机结构
- PAT乙级真题及训练集(19)--1021. 个位数统计 (15)
- Python 排序(sorted)
- FPGA综合系统设计(一):1.2/50μs冲击电压测量与显示
- Number Complement
- PAT-A-1042. Shuffling Machine (20)
- python爬虫之requests对https的限制访问
- 分布式session的解决方案
- 《简明Python教程》之异常
- UI基础
- CentOS7.3安装Go运行和开发环境