2017-06-29 63 views
13

如何按字母順序排列整數?就像這樣:如何按字母順序排列整數

integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0] 

印像這樣的Python控制檯上

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 

我已經試過這

def sort_integers(integers): 
    return sorted(integers) 

,但我猜你必須這樣做,這樣

def sort_integers(integers): 
    return sorted(integers, key = lambda.......) 

我只是不知道該去幹什麼拉姆達後的儀式?

回答

27
sorted(integers, key=str) 

-> 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 

說明:str是將整數轉換爲字符串的函數。由於sorted默認情況下按字母順序對字符串進行排序,因此完全按照您的要求進行。

11

您可以簡單地使用strkey

sorted(integers,key=str)

所以這裏的每個元素,str函數被調用,其中int轉換成str ING。這本身並不壯觀。但字符串的比較是不同的:它按字典順序排序。

>>> sorted([0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222],key=str) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
4

如果您想您的整數字典順序排序,就好像它們是串,你可以告訴Python把它們當做字符串排序時:

>>> integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0] 
>>> sorted(integers, key=lambda n: str(n)) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
>>> 

但實際上,甚至不必有lambda n: ...部分。您可以簡單地將str函數作爲key,Python將知道該怎麼做。調用str(n)其中n是在你的列表中的每個元素:

>>> sorted(integers, key=str) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
>>> 

所以你的函數將結束是:

def sort_integers(integers): 
    return sorted(integers, key=str) 
0

這將工作

list(map(int, (sorted(str(i) for i in integers)))) 

輸出:

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
+1

但他希望得到的列表爲整數。 –

+1

謝謝,忘記了。已更新 – Alter

+1

您的排序呼叫不需要執行任何操作。與其他答案類似,只需將關鍵參數傳遞給您的列表即可。 – idjaw

0

嘗試Most Significant Digit Radix Sort。這樣可以避免必須將整數轉換爲字符串,但除非使用庫或其他預先編寫的code,否則實施起來會更加困難。

+1

雖然這可能在理論上回答這個問題,[這將是更可取的](//meta.stackoverflow。com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 –