一道 Python 面试题

2016-06-18 17:19:31 +08:00
 kethylar

列表排序:

1.正数在前负数在后 2.整数从小到大 3.负数从大到小

例: 排序前[7, -8, 5, 4, 0, -2, -5]

排序后[0, 4, 5, 7, -2, -5, -8]

sorted(lst, key=lambda x:_______)

6663 次点击
所在节点    Python
35 条回复
alexapollo
2016-06-18 23:14:39 +08:00
@Owenjia 对,所以这里写 7 , max 放之前单独 O(n)一次
Owenjia
2016-06-18 23:31:51 +08:00
@alexapollo
额,我上面说的好像不对,即便自己包装也行不通,因为 lst 的类型是 list 。
jedihy
2016-06-19 00:50:38 +08:00
sorted(lst, key=lambda x: (max(lst) - x) if x < 0 else x)
Maic
2016-06-19 21:48:43 +08:00
@binux 简单实用
Maic
2016-06-19 22:19:09 +08:00
@wangyongbo 能解释一下怎么回事吗?谢谢了。
语法: sorted(iterable[, key][, reverse]),
你写的 key = lambda x: (x < 0, abs(x)))
这个如果是 2 ,就是 key = (False, 2)
这个怎么就能排序了呢?
kojirou
2016-06-20 00:01:13 +08:00
2.整数从小到大 3.负数从大到小
负数不是整数? - -
dalang
2016-06-20 00:43:43 +08:00
@wowpanda 不需要 `max(lst)`, 直接赋个最大的整数,比如 sys.maxsize 就可以了。
Allianzcortex
2016-06-20 08:03:37 +08:00
mark.自己一开始用的是 magicnumber ,sorted(l,key=lambda x:x if x>=0 else abs(x)+100) 最后直接这样:
sorted(l,key=lambda x:x if x>=0 else abs(x)+max(l))
Allianzcortex
2016-06-20 08:15:49 +08:00
@Maic lambda 是匿名函数,按照上面所说,如 7 返回的是 (False,7) -2 返回的是 (True,2) -8 返回的是(True,8) 在比较的时候比较的是两个元组。优先选择 False,在都为 True 的情况下再比较负数的绝对值大小
avatar10086
2016-06-21 15:13:19 +08:00
avatar10086
2016-06-21 15:14:31 +08:00
@wangyongbo 问一下那个 sorted(s,key=lambda x:(x < 0, abs(x)))
怎么执行的,表示没看懂
wangyongbo
2016-06-21 15:30:45 +08:00
@avatar10086
http://peiqiang.net/2015/01/20/in-python-you-sort-with-a-tuple.html
先比较第一个元素,再比较第二个元素 false < true
sorted([True, False, False, True])
[False, False, True, True]
False == 0
True
>>> True == 1
True
>>> False < True
True
avatar10086
2016-06-21 15:42:59 +08:00
@wangyongbo 谢谢,学到老,活到老
byteli
2016-06-21 16:27:34 +08:00
从楼上学习了,试着理解了下
lambda x: (x<0, abs(x) )这里 lambda 返回一个二元组作为 key 的排序条件,也即先对 x<0 :若 x>=0 则得到 False , x<0 则 True ,排序时 False 排在 True 前面,则实现了 1.正数在前负数在后
而后对条件 abs(x) :正数从小到大,负数按绝对值排序
roricon
2016-06-22 13:20:53 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/286691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX