2 回答

TA貢獻1802條經驗 獲得超10個贊
您可以使用正則表達式來獲取數字,然后首先對其進行排序,然后按基礎字符串(例如,如果有兩個坐標具有相同的數字)進行排序:
import re
coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']
coords.sort(key=lambda c: (re.search(r'\d+', c).group(0), c))
print(coords)
輸出:
['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']

TA貢獻1803條經驗 獲得超6個贊
您可以使用c in '0123456789'或c.isdigit過濾掉非數字字符:
>>> s = 'b150brown'
>>> ''.join(c for c in s if c.isdigit())
'150'
>>> int(''.join(c for c in s if c.isdigit()))
150
然后使用它作為key參數list.sort:
coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']
coords.sort(key=lambda s: int(''.join(c for c in s if c.isdigit())))
print(coords)
# ['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']
此外,當字符串具有相同的數字時,您可以通過按字典順序對字符串進行排序來打破平局,正如Shash Sinha所建議的:
coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']
coords.sort(key=lambda s: (int(''.join(c for c in s if c.isdigit())), s))
print(coords)
# ['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']
添加回答
舉報