由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个python问题
相关主题
Python擂台:算24点请教一个初级算法问题 (转载)
Python问题请教看看人家高手写的排序代码
求问 这样的问题 目标函数怎么定义?std::map 为什么没有排序呢
我也来一个, quick sort 只要一行。请问如何用sort命令给数据排序? (转载)
为什么不能成功排序STL里的priority_queue到底有啥用?
请教一个python 问题问一个leetcode的排序问题
[合集] 答案. 未排序的100个数字,如何最快地找出最大的5个问题请教
如何将若干已升序排序好的数组合并在一起,并仍然是升序?问个HBase的问题 (转载)
相关话题的讨论汇总
话题: mylist话题: sorted话题: 排序话题: item话题: key
进入Programming版参与讨论
1 (共1页)
e****e
发帖数: 52
1
有个list如
mylist = [['b',2.5,4],['A',1.,2],['a',1.5,1],['B',0.5,3],['a',0.5,4]]
想排序成
[['A',1.,2],['a',0.5,4],['a',1.5,1],['B',0.5,3],['b',2.5,4]]
就是说对mylist中的item list的第一item按字母顺序和先大写后小写排序,如果字母
相同,则按第二item的值大小排序。
我可以单独对字母排序,
sorted(mylist, key=lambda mylist:(str.lower(mylist[:][0]),mylist[:][0]))
得到
[['A', 1.0, 2], ['a', 1.5, 1], ['a', 0.5, 4], ['B', 0.5, 3], ['b', 2.5, 4]]
但请问怎么同时对各个item list的第二个item也按大小排序? 谢谢。
l*********s
发帖数: 5409
2
do it directly
f*******n
发帖数: 12623
3
sorted(mylist, key=lambda mylist:(str.lower(mylist[0]),mylist[1]))
e****e
发帖数: 52
4
试过了,这个等效于只对第二个item按大小排序,结果是
[['a', 0.5, 4], ['A', 1.0, 2], ['a', 1.5, 1], ['B', 0.5, 3], ['b', 2.5, 4]]

【在 f*******n 的大作中提到】
: sorted(mylist, key=lambda mylist:(str.lower(mylist[0]),mylist[1]))
l********a
发帖数: 1154
5
你这个用循环写吧
不转小写的话,'B'<'a'
转小写的话,又不能保证第二个元素的顺序
d**o
发帖数: 864
6
推荐用dataframe
sort函数指定多个column直接解决这个问题。

【在 e****e 的大作中提到】
: 有个list如
: mylist = [['b',2.5,4],['A',1.,2],['a',1.5,1],['B',0.5,3],['a',0.5,4]]
: 想排序成
: [['A',1.,2],['a',0.5,4],['a',1.5,1],['B',0.5,3],['b',2.5,4]]
: 就是说对mylist中的item list的第一item按字母顺序和先大写后小写排序,如果字母
: 相同,则按第二item的值大小排序。
: 我可以单独对字母排序,
: sorted(mylist, key=lambda mylist:(str.lower(mylist[:][0]),mylist[:][0]))
: 得到
: [['A', 1.0, 2], ['a', 1.5, 1], ['a', 0.5, 4], ['B', 0.5, 3], ['b', 2.5, 4]]

z*******h
发帖数: 346
7
>>> sorted(mylist, key = lambda x : (x[0].lower(), x[1]))
[['a', 0.5, 4], ['A', 1.0, 2], ['a', 1.5, 1], ['B', 0.5, 3], ['b', 2.5, 4]]

【在 e****e 的大作中提到】
: 有个list如
: mylist = [['b',2.5,4],['A',1.,2],['a',1.5,1],['B',0.5,3],['a',0.5,4]]
: 想排序成
: [['A',1.,2],['a',0.5,4],['a',1.5,1],['B',0.5,3],['b',2.5,4]]
: 就是说对mylist中的item list的第一item按字母顺序和先大写后小写排序,如果字母
: 相同,则按第二item的值大小排序。
: 我可以单独对字母排序,
: sorted(mylist, key=lambda mylist:(str.lower(mylist[:][0]),mylist[:][0]))
: 得到
: [['A', 1.0, 2], ['a', 1.5, 1], ['a', 0.5, 4], ['B', 0.5, 3], ['b', 2.5, 4]]

p**o
发帖数: 3409
8
>>> mylist = [['b',2.5,4],['A',1.,2],['a',1.5,1],['B',0.5,3],['a',0.5,4]]
>>> from operator import itemgetter
>>>
>>> sorted(mylist, key=itemgetter(0,1))
[['A', 1.0, 2], ['B', 0.5, 3], ['a', 0.5, 4], ['a', 1.5, 1], ['b', 2.5, 4]]

【在 e****e 的大作中提到】
: 有个list如
: mylist = [['b',2.5,4],['A',1.,2],['a',1.5,1],['B',0.5,3],['a',0.5,4]]
: 想排序成
: [['A',1.,2],['a',0.5,4],['a',1.5,1],['B',0.5,3],['b',2.5,4]]
: 就是说对mylist中的item list的第一item按字母顺序和先大写后小写排序,如果字母
: 相同,则按第二item的值大小排序。
: 我可以单独对字母排序,
: sorted(mylist, key=lambda mylist:(str.lower(mylist[:][0]),mylist[:][0]))
: 得到
: [['A', 1.0, 2], ['a', 1.5, 1], ['a', 0.5, 4], ['B', 0.5, 3], ['b', 2.5, 4]]

p**o
发帖数: 3409
9
>>> sorted(mylist, key=lambda x: (x[0].lower(), x[0], x[1]))
[['A', 1.0, 2], ['a', 0.5, 4], ['a', 1.5, 1], ['B', 0.5, 3], ['b', 2.5, 4]]
e****e
发帖数: 52
10
最后还是用循环写了。
谢谢各位的回复。

【在 l********a 的大作中提到】
: 你这个用循环写吧
: 不转小写的话,'B'<'a'
: 转小写的话,又不能保证第二个元素的顺序

p**o
发帖数: 3409
11
你是在说笑么

【在 e****e 的大作中提到】
: 最后还是用循环写了。
: 谢谢各位的回复。

e****e
发帖数: 52
12
没有啊.
请展开说说.

【在 p**o 的大作中提到】
: 你是在说笑么
l********a
发帖数: 1154
13
pulo兄弟不是已经在9楼给出非循环写法了吗?

【在 e****e 的大作中提到】
: 没有啊.
: 请展开说说.

1 (共1页)
进入Programming版参与讨论
相关主题
问个HBase的问题 (转载)为什么不能成功排序
问个面试题目请教一个python 问题
问个有关C++ map的问题[合集] 答案. 未排序的100个数字,如何最快地找出最大的5个
问个简单的算法题如何将若干已升序排序好的数组合并在一起,并仍然是升序?
Python擂台:算24点请教一个初级算法问题 (转载)
Python问题请教看看人家高手写的排序代码
求问 这样的问题 目标函数怎么定义?std::map 为什么没有排序呢
我也来一个, quick sort 只要一行。请问如何用sort命令给数据排序? (转载)
相关话题的讨论汇总
话题: mylist话题: sorted话题: 排序话题: item话题: key