最近有小伙伴私聊問了一些類似的問題,就是關(guān)于python的sort排序的問題:
a = [1, 0, 4, 0, 2, 3]
a.sort(key=bool)
print(a)
輸出結(jié)果:
[0, 0, 1, 4, 2, 3]
就是對這個排序的有點不太理解,為什么是[0, 0, 1, 4, 2, 3],不應(yīng)該按升序來的嗎?
之所以產(chǎn)生這個誤區(qū),是因為對這個sort理解還不夠,我之前也寫過一篇關(guān)于sort排序的實現(xiàn),里面簡單的闡述原理,并且也實現(xiàn)了demo。
我們再來回到這個問題上:
a.sort(key=bool) 這步可以這樣理解:
a = [1, 0, 4, 0, 2, 3]
b = list(map(lambda x: (bool(x), x), a))
b.sort(key=lambda x: x[0])
print(list(map(lambda x: x[1], b)))
這里運用了元組排序?qū)@個進行了隱式轉(zhuǎn)化。
也就是說轉(zhuǎn)成了元組,指定了排序的索引位置,然后再轉(zhuǎn)回來。