所以我有一個字串串列,我用以下命令對其進行排序:
list = [' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' LXQ2-T | ile: 11 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 11 |', ' 4-HWWF | ile: 9 |', ' J-ZYSZ | ile: 12 |', ' UGR-J2 | ile: 8 |']
def ile_sort(elem):
return re.findall(r'ile: (\d )',elem)
list = sorted(list, key=ile_sort)
帶 6 的字串應該排在第一位,帶 13 的字串排在最后,但實際結果是:
[' LXQ2-T | ile: 11 |', ' 4-HWWF | ile: 11 |', ' J-ZYSZ | ile: 12 |', ' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' UGR-J2 | ile: 8 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 9 |']
uj5u.com熱心網友回復:
問題是re.findall()在這些串列項上使用會回傳串列中的字串,例如:["13"]
為了解決這個問題,用這個替換你的ile_sort()方法:
def ile_sort(elem):
return int(re.findall('ile: (\d )', elem)[0])
uj5u.com熱心網友回復:
正如其他人已經提到的,您需要從已傳遞給key引數的函式中回傳單個元素。(不是從 中回傳的串列findall)。該元素將用于排序。
您可以從findall或更改findall為search并獲取第一個組中的第一項。不要忘記將最終結果轉換為整數。
import re
lst = [' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' LXQ2-T | ile: 11 |',
' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 11 |', ' 4-HWWF | ile: 9 |',
' J-ZYSZ | ile: 12 |', ' UGR-J2 | ile: 8 |']
def ile_sort(elem):
return int(re.search(r'ile: (\d )', elem).group(1))
lst = sorted(lst, key=ile_sort)
print(lst)
輸出:
[' LXQ2-T | ile: 6 |', ' UGR-J2 | ile: 8 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 9 |', ' LXQ2-T | ile: 11 |', ' 4-HWWF | ile: 11 |', ' J-ZYSZ | ile: 12 |', ' R1O-GN | ile: 13 |']
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462146.html
上一篇:Python中的3種方式快速排序
下一篇:對空格前的第一個數字進行排序
