2012-09-30 16 views
2

我試着使用排序排序Python的排序方式名稱

dir =["A1","A2","A10","A3"] 
sorted(dir) 

我的預期陣列是

["A1","A2","A3","A10"] 

,但實際結果是

["A1", "A10", "A2", "A3"] 

如何通過在Python名稱排序數組?

回答

5

它按字母順序排序,因此您需要分解數字並將它們轉換爲整數並對其進行排序。 (字符串中的數字被視爲只是字符,所以它會「看到」「A10」,並嘗試首先按「A」,然後按「1」,然後按「0」對其進行排序。例如:

>>> sorted(dir, key=lambda x: int(x[1:])) 
['A1', 'A2', 'A3', 'A10'] 

如果您要在dir之外還有其他字母,除了「A」之外,您需要更復雜的排序方法,但它會沿着相同的方向。 (如果你解釋什麼dir包含更多,我可以寫一個例子。)作爲mgilson的評論指出,如果dir的元素遵循1個字符+數字格式,那麼你可以利用元組排序並做這樣的事情:

>>> dir.append('B12') 
>>> sorted(dir, key=lambda x: (x[0],int(x[1:]))) 
['A1', 'A2', 'A3', 'A10', 'B12'] 
+3

它可能會更好做'key = lambda x:(x [0],int(x [1:]))' – mgilson