我有一個包含帶有數字的句子的串列,我想按數字而不是按字母順序排序。但是當我使用 sort 函式時,它按字母順序而不是數字順序對元素進行排序,我該如何解決這個問題?
num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort()
print(num)
output:
['charles.....','mylah.....','ryan......']
如您所見,它按字母順序排序,但這不是我預期的輸出
點代表句子的其余部分
expected result:
['mylah has 3 watermelons','ryan has 8 apples','charles has 16 bananas']
這是預期的輸出,其中元素按數字而非字母順序排序
uj5u.com熱心網友回復:
迄今為止的解決方案側重于特定于字串結構的解決方案,但對于稍微不同的字串結構會失敗。如果我們只提取字串的數字部分,然后轉換為 an int,我們將得到一個可以傳遞給排序函式的 key 引數的值:
num.sort(
key=lambda s: int(''.join(c for c in s if c.isdigit()))
)
key 引數允許您指定資料的某些替代方面以按 lambda 函式提供的值進行排序,在這種情況下。
uj5u.com熱心網友回復:
您需要傳入一個鍵來對它們進行排序,以拆分字串并將數字決議為要排序的數字,如果您希望具有相同數字的那些,您也可以按字母順序排序。
sorted(num, key=lambda x: (int(x.split()[2]), x))
或者
num.sort(key=lambda x: (int(x.split()[2]), x))
uj5u.com熱心網友回復:
您需要使用key=來讓sort您知道要為每個元素分配哪個值進行排序。
如果字串總是結構化的,你可以使用:
num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort(key=lambda x: int(x.split(' ')[2]))
print(num)
如果它們更復雜,請查看正則運算式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/398171.html
上一篇:使用JavaScript在多個HTML表格元素中顯示資料陣列中的多個值
下一篇:Uncaught(inpromise)TypeError:querySnapshot.forEachisnotafunctionReactNative
