簡體   English   中英

如何按數字順序而不是字母順序對列表中的元素進行排序

[英]how to sort the elements in a list in numerical order and not alphabetical

我有一個列表,其中包含帶有數字的句子,我想按數字而不是字母順序排序。 但是當我使用排序 function 時,它按字母而不是數字對元素進行排序,我該如何解決這個問題?

num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort()
print(num)

output:
['charles.....','mylah.....','ryan......']

如您所見,它按字母順序排序,但這不是我預期的 output

點代表句子的 rest

expected result:

['mylah has 3 watermelons','ryan has 8 apples','charles has 16 bananas']

這是預期的 output ,其中元素按數字而非字母順序排序

將列表以dict的形式放入,key為從字符串中提取的數值,value為字符串?

然后,您可以根據鍵對字典進行排序嗎?

您需要傳入一個鍵來對它們進行排序,該鍵將字符串拆分並將數字解析為要排序的數字,如果您希望具有相同數字的那些,您也可以按字母順序排序。

sorted(num, key=lambda x: (int(x.split()[2]), x))

或者

num.sort(key=lambda x: (int(x.split()[2]), x))

您需要使用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)

如果它們更復雜,請查看正則表達式。

到目前為止,解決方案專注於特定於字符串結構的解決方案,但會因字符串結構略有不同而失敗。 如果我們只提取字符串的數字部分,然后轉換為int ,我們將得到一個可以傳遞給排序函數的 key 參數的值:

num.sort(
    key=lambda s: int(''.join(c for c in s if c.isdigit()))
)

key 參數允許您指定要排序的數據的某些替代方面,在這種情況下,由 lambda function 提供的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM