我有一個代碼例子:
在[60]。sorted([3, 1, None], key=lambda x。(x is None, x))
Out[60]: [1, 3, None]
在[61]。sorted([3, 1, None], key=lambda x。(x is not None, x))
Out[61]: [None, 1, 3]
我想我確實理解它的作用--看起來它允許在排序程序中跳過鍵的None值,否則排序將引發TypeError,試圖將int與None進行比較--但我不明白它是如何以及為什么會這樣作業。特別是我對回傳元組的lambda函式感到困惑。
我在排序HOWTO中找不到任何相關內容。 我希望得到一個解釋或鏈接,讓我知道這種行為在哪里被記錄下來。
uj5u.com熱心網友回復:
圖元被比較并按詞典順序排序:
圖元被比較并按詞典順序排序。
>>> sorted([(0, 17), (1,15), (0,12) 。(0, 9), (1, 8) 。(1, 7), (0, 2)】)
[(0, 2), (0, 9) 。(0, 12), (0, 17),(1,7),(1。8), (1, 15) ]
>>> (0, 12) < (1, 9)
True True
>>> (0, 12) < (0, 13)
True True
>>> (1, 12) < (0, 9)
False。
"詞典順序 "只是 "英語詞典中的同類詞 "的一個花哨說法:先比較第一個字母,只有當第一個字母相等時,再比較第二個字母,只有當前兩個字母相等時,再比較第三個字母,等等。
使用元組作為鍵,元組也將按照詞典的順序進行比較。
在你的例子中,x是None和x不是None評估為布林值,True或False。
布林值也可以被比較:
>>> False < True>
True True
>>> True < False。
False False
作為一個結果,sorted([3, 1, None], key=lambda x: (x is None, x))將認為最小的元素是那些x is None為False的元素,而最大的元素是那些x is None為True的元素:
>>> sorted([3, 1, None], key=lambda x。(x is None, x))
[1, 3, None]
>>> sorted(map(lambda x: (x is None, x), [3, 1, None])
[(False, 1), (False, 3), (True, None)]
uj5u.com熱心網友回復:
sorted的key引數是用來對值進行排序的,如果有多個元素的話,按順序排列。
你的代碼所做的是把無放在第一位(或最后一位),作為次要的鍵,對非無的元素進行排序
第一個鍵。[3, 1, None]被映射到[False, False, True],相當于[0, 0, 1]并將None推到了最后。
第二個關鍵是打破3和1之間的平局
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310789.html
標籤:
