2017-06-29 19 views
13

Jak sortować liczby całkowite alfabetycznie? Tak:Jak sortować liczby całkowite alfabetycznie?

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

wydrukowane tak na konsoli Pythona

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

Próbowałem to

def sort_integers(integers): 
    return sorted(integers) 

ale myślę, że trzeba to zrobić w ten sposób

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

Po prostu nie wiem do czego w rytuał po lambdzie?

Odpowiedz

27
sorted(integers, key=str) 

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

Objaśnienie: str to funkcja, która rzuca liczby całkowite w ciągi. Ponieważ sorted sortuje ciągi alfabetycznie domyślnie, robi dokładnie to, o co prosiłeś.

11

można po prostu użyć str jak key:

sorted(integers,key=str)

Więc dla każdego elementu, funkcja str nazywa, który konwertuje int w str inż. To samo w sobie nie jest spektakularne. Ale porównanie łańcuchów jest różne: sortuje leksykograficznie.

>>> 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

Jeśli chcesz posortować liczby całkowite leksykograficznie jak gdyby były struny, można powiedzieć, Python, aby traktować je jako ciągi podczas sortowania:

>>> 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] 
>>> 

Ale faktycznie nie trzeba nawet mieć część albo lambda n: .... Możesz po prostu przekazać funkcję str jako key, a Python będzie wiedział, co robić. nazywając str(n) gdzie n jest każdy element na liście:

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

Więc funkcja będzie w końcu jest:

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

to zadziała

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

wyjściowa:

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

Ale on chce wynikową listę jako liczbę całkowitą. –

+1

dzięki, zapomniałem o tym. zaktualizowane – Alter

+1

Twoje posortowane połączenie również nie musi robić tego, co robi. Podobnie jak pozostałe odpowiedzi, po prostu podaj swoją listę kluczowym argumentem. – idjaw

0

Wypróbuj Most Significant Digit Radix Sort. Dzięki temu nie trzeba konwertować liczb całkowitych na ciągi, ale jest trudniejsze do wdrożenia, chyba że korzystasz z biblioteki lub innego wstępnie zapisanego code.

+1

Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby to lepsze] (// meta.stackoverflow. –

Powiązane problemy