python数据排序

lp106 2012-04-16 11:04:41
给出一个list:
list = [1,2,9,5,6]
list.sort()
list.reverse()
print list
这个是实现了list从大到小的排序,但如果list的原下标跟着数据一起移动,如经过排序后的下标为[2,4,3,1,0],这要如何实现呢?谢谢各位大侠!
...全文
311 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
老牛同学 2012-04-16
  • 打赏
  • 举报
回复
1楼正解!!

在Python3中,range()的表现形式与xrange()一样,返回都是一个迭代器,不是一个list,需要转换,如:
index = list(range(len(l)))
angel_su 2012-04-16
  • 打赏
  • 举报
回复
数据量不大的话,下标加入数据里吧,不然你得排2次也容易搞乱(譬如你先就地排数据,才想去排下标就不行)
>>> lst = [1,2,9,5,6]
>>> new = sorted(enumerate(lst), key=lambda x: -x[1])
>>> new
[(2, 9), (4, 6), (3, 5), (1, 2), (0, 1)]
>>> zip(*new)
[(2, 4, 3, 1, 0), (9, 6, 5, 2, 1)]
>>>
panghuhu250 2012-04-16
  • 打赏
  • 举报
回复
python的sort有一个key选项。


>>> l =[1,2,9,5,6]
>>> index = range(len(l))
>>> index.sort(key=lambda i: l[i]) # 从小到大
>>> index
74: [0, 1, 3, 4, 2]
>>> index.sort(key=lambda i: -l[i]) # 从大到小
>>> index
75: [2, 4, 3, 1, 0]
lp106 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

数据量不大的话,下标加入数据里吧,不然你得排2次也容易搞乱(譬如你先就地排数据,才想去排下标就不行)
>>> lst = [1,2,9,5,6]
>>> new = sorted(enumerate(lst), key=lambda x: -x[1])
>>> new
[(2, 9), (4, 6), (3, 5), (1, 2), (0, 1)]
>>> zip(*new)
[(2……
[/Quote]数据量大的话用一楼的方法是比较好的吗?

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧