慕田峪9158850
2021-08-14 17:19:39
我需要使用該sorted()函數(shù)才能從這里獲得:test2 = [1,'2',3,'4',5,'A']到這里(創(chuàng)建一個新列表,它首先包含已排序的整數(shù),然后是已排序的字符串):test2 = [1,3,5,'2','4','A']
3 回答

眼眸繁星
TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊
sorted(test2, key=lambda x: (isinstance(x, str), x))
這依賴于False < True
元組按字典順序排序的事實。
更多細(xì)節(jié):
元組通常用于按多個指標(biāo)進(jìn)行排序??紤]一下:
key=lambda x: isinstance(x, str)
該key
關(guān)鍵字參數(shù)來sorted
告訴它由給定的調(diào)用,而不是由vaules自己的結(jié)果值進(jìn)行排序。此鍵將返回False
整數(shù)和True
字符串。由于False
相當(dāng)于0
和True
to1
,False
被認(rèn)為更小,所有整數(shù)將在列表中排在第一位。
這只是我們想要的一半,因為整數(shù)和字符串之間沒有排序。這是元組進(jìn)來的。上面的關(guān)鍵功能:
key=lambda x: (isinstance(x, str), x)
為每個元素返回一個元組。元組首先按它們的第一個元素排序。如果兩個元組具有等效的第一個元素,則比較它們的第二個元素,依此類推。這稱為詞典排序。假設(shè)我們有這個列表:
this = ["a", 5, "b", 3]
key 函數(shù)將按順序返回:
(True, "a"), (False, 5), (True, "b"), (False, 3)
元組將首先按它們的第一個元素(布爾值)排序:
(False, 5), (False, 3), (True, "a"), (True, "b")
現(xiàn)在,我們有兩對元組,它們的第一個元素相等。每對將按其第二個元素在內(nèi)部排序:
(False, 3), (False, 5), (True, "a"), (True, "b")
最終結(jié)果不是元組本身,而是每個元組的關(guān)鍵函數(shù)的相應(yīng)輸入:
[3, 5, "a", "b"]
實際上,該算法不需要“兩次”排序,但概念上是相同的。
添加回答
舉報
0/150
提交
取消