我想對包含(字串、整數、整數)的元組串列進行排序。這些元組的第一個值可以是任何字串(例如“$”,或數字字串,例如“9”)。目標是根據這些元組的第一個元素進行排序,如果比較發生在兩個相同的字串之間,我將根據第二個元素進行排序。我嘗試了以下方法,但結果不成功。解決方案?
array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
sorted_array = sorted(array, key=lambda x:(x[0], int(x[1])))
print(sorted_array)
輸出:
[('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
我想得到:
[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9), ('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]
uj5u.com熱心網友回復:
使用natsort(自然排序),str.isdigit您可以自然地對數字進行排序,同時首先保留非數字。但是您可能期望的更一般規則尚不清楚。
from natsort import natsorted
array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
sorted_array = natsorted(array, key=lambda x:(x[0].isdigit(), x))
print(sorted_array)
輸出:
[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9), ('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]
uj5u.com熱心網友回復:
如果您正確對齊排序鍵中的字串組件,則可以通過常規排序獲得該結果。
array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9),
('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18),
('16', 11, 20)]
sorted_array = sorted(array,key=lambda x:(x[0].rjust(15),x[1:]))
print(sorted_array)
[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9),
('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373305.html
下一篇:在多個條件下從串列中提取字串
