首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

怎么给一个list排序 当按照第一个元素升序排 第一个元素一样的话 按照第2个元素 降序排

2013-01-06 
怎样给一个list排序当按照第一个元素升序排第一个元素一样的话按照第2个元素降序排 ?a [(2,3),(4,1),(2,

怎样给一个list排序 当按照第一个元素升序排 第一个元素一样的话 按照第2个元素 降序排 ?
a = [(2,3),(4,1),(2,8),(2,1),(3,4)]

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

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




难点就是第2条 

请问大家这怎么弄 ?

谢谢
[解决办法]
性能这玩意还是要用数据说话。

随手写了个:

import time

n = xrange(1000000)
x = zip(n, n)

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

x = 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更快。

热点排行