一道 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:_______)

6656 次点击
所在节点    Python
35 条回复
alexapollo
2016-06-18 17:31:11 +08:00
sorted(lst, key=lambda x: [x-7, -x][x<0])
sorted(lst, key=lambda x: x-7 if x >= 0 else -x)

意思一样,不知道前面是否有编译器优化
wowpanda
2016-06-18 17:40:09 +08:00
sorted(lst,key=lambda x:x if x>=0 else max(lst)-x)
binux
2016-06-18 17:41:57 +08:00
lambda x: (x < 0, x if x > 0 else -x)
allenling
2016-06-18 18:15:25 +08:00
两步排序
lambax: (x<0, abs(x))
wangyongbo
2016-06-18 18:18:05 +08:00
我测试了一下
sorted(l, key = lambda x: -x)
这样就可以。
wangyongbo
2016-06-18 18:19:21 +08:00
看错了。。。
allenling
2016-06-18 18:20:20 +08:00
@wangyongbo
纳尼
我们用的不是一个 Python ?
wangyongbo
2016-06-18 18:22:14 +08:00
sorted(l, key = lambda x: (x < 0, abs(x)))
[0, 4, 5, 7, -2, -5, -8]
wangyongbo
2016-06-18 18:23:06 +08:00
@allenling 看错了。
aec4d
2016-06-18 18:34:44 +08:00
lambda x:x if x>=0 else -x<<64
cloverstd
2016-06-18 18:44:36 +08:00
学到新技能,原来 Python 的 Comparison Operators 还能操作 Tuples 和 lists

https://docs.python.org/2.3/ref/comparisons.html
Mark3K
2016-06-18 18:44:40 +08:00
@aec4d 🐂
SlipStupig
2016-06-18 20:14:31 +08:00
@wangyongbo 绝对值法果然是最简洁的
imn1
2016-06-18 20:41:13 +08:00
整数从小到大 3.负数从大到小

这个一看就想到两个结论: 1.绝对值从小到大, 2.正数错写成了“整数”
cloverstd
2016-06-18 20:48:55 +08:00
@aec4d Hi
请问能解释下为什么当 x 小于 0 时,要左移 64 位吗
aec4d
2016-06-18 21:47:41 +08:00
@cloverstd 首先说明我这个思路并不能用于实际情况
思路就是把负数变成正数在放在所有正数的后面(所以乘以一个很大的正数)
向左位移 64 和乘 2 的 64 次方是一样的意思
cloverstd
2016-06-18 21:58:33 +08:00
@aec4d 了解了,谢谢了
那就是有一个坑在这里,如果大于 x * 2 ** 64 的话,就嗝屁了
Owenjia
2016-06-18 22:27:54 +08:00
@alexapollo
7 是 max(lst) 么?据我所知,好像要自己包装下 max ,加个 lru_cache 装饰器才会有优化。
kethylar
2016-06-18 23:06:07 +08:00
条件 2 写错,应该是正数在前,负数在后 @all

谢谢各位的回复
kethylar
2016-06-18 23:07:20 +08:00
哦 又写错 应该是正数从小到大

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

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

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

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

© 2021 V2EX