2012-12-25 18 views
84

Jestem nieco zdezorientowany jeśli chodzi o strukturę danych w pythonie; (), [] i {}. Próbuję uporządkować prostą listę, prawdopodobnie ponieważ nie mogę zidentyfikować typu danych, których nie mogę posortować.Pythonowa struktura danych w porządku alfabetycznym

Moja lista jest prosta: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Moje pytanie brzmi, jaki typ danych jest to, i jak sortować alfabetycznie słowa?

+0

Jeśli chcesz posortować listę, możesz użyć "list = [" Pytanie "," utwórz "," Turzyca "," Eflux "," Kaprys "," Intryga "] list.sort() lista drukowania". – kannanrbk

+0

'[]' otacza wbudowany typ danych 'list', (patrz http://www.tutorialspoint.com/python/python_lists.htm). Listy są po prostu grupami wartości (mogą zawierać inne obiekty iterowalne - np. Listy zagnieżdżone). '()' zamyka wbudowaną 'krotkę'. Są niezmienne (nie można ich zmienić). (patrz http://www.tutorialspoint.com/python/python_tuples.htm). I '{}' zamyka wbudowany 'słownik'. Paralele ze słownikiem (dla słów), gdzie "klucz" byłby słowem, a "wartością" jest definicja. (patrz http://www.tutorialspoint.com/python/python_dictionary.htm). –

Odpowiedz

124

[] oznacza list, () oznacza tuple i {} oznacza dictionary. Powinieneś rzucić okiem na official Python tutorial, ponieważ są to podstawy programowania w Pythonie.

To, co masz, to lista ciągów. Można rozwiązać to tak:

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 

In [2]: sorted(lst) 
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute'] 

Jak widać, słowa, które rozpoczynają się wielką literą uzyskać pierwszeństwo nad tymi, zaczynając od małej litery. Jeśli chcesz, aby posortować je niezależnie, to zrobić:

In [4]: sorted(lst, key=str.lower) 
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim'] 

Można także posortować listę w odwrotnej kolejności w ten sposób:

In [12]: sorted(lst, reverse=True) 
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux'] 

In [13]: sorted(lst, key=str.lower, reverse=True) 
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute'] 

Uwaga: Jeśli pracujesz z Python 3, następnie str jest prawidłowym typem danych dla każdego ciągu znaków zawierającego tekst czytelny dla człowieka. Jeśli jednak nadal będziesz musiał pracować z Pythonem 2, możesz poradzić sobie z ciągami znaków Unicode, które mają typ danych unicode w Pythonie 2, a nie str. W takim przypadku, jeśli masz listę ciągów Unicode, musisz napisać key=unicode.lower zamiast key=str.lower.

+0

Używanie drugiego przykładu na 'find_one()' pymongo 'wynikającego z bazy danych MongoDB, powoduje błąd:' descriptor 'lower' wymaga obiektu 'str', ale otrzymał 'unicode''. Wynikiem jest tablica łańcuchów i zaimplementowana w następujący sposób: 'wyniki ['słowa kluczowe'] = posortowane (słowa kluczowe ['keyword'], key = str.lower)'. Czy ktoś wie, jak rozwiązać ten problem? – user1063287

+0

@ user1063287 Przepraszamy za spóźnioną odpowiedź. W twoim przypadku musisz napisać 'key = unicode.lower' zamiast' key = str.lower'. Dzieje się tak, ponieważ masz do czynienia z ciągami znaków Unicode, a nie z ciągami bajtów. Więcej informacji na ten temat można znaleźć w oficjalnym [Unicode HOWTO] (https://docs.python.org/3/howto/unicode.html), szczególnie w odniesieniu do różnic między Python 2 i 3. – pemistahl

6

Masz do czynienia z listą pytonów, a jej sortowanie jest tak proste, jak to możliwe.

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
my_list.sort() 
7

Możesz użyć wbudowanej funkcji sorted.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']) 
3
>>> a =() 
>>> type(a) 
<type 'tuple'> 
>>> a = [] 
>>> type(a) 
<type 'list'> 
>>> a = {} 
>>> type(a) 
<type 'dict'> 
>>> a = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort() 
>>> a 
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute'] 
>>> 
19

Python posiada wbudowaną funkcję o nazwie sorted, które dadzą Ci listę posortowaną z dowolnego iterowalny karmić go (takie jak listy ([1,2,3]); dict ({1:2,3:4}, choć będzie to po prostu zwróci posortowana lista kluczy; zestaw ({1,2,3,4). lub krotką ((1,2,3,4)))

>>> x = [3,2,1] 
>>> sorted(x) 
[1, 2, 3] 
>>> x 
[3, 2, 1] 

listy mają również sort metodę, która będzie wykonywała operacje sortowania w miejscu

.

Oba również przyjmują argument key, który powinien być wywoływalny (funkcja/lambda), którego można użyć do zmiany sortowania według.
Na przykład, aby uzyskać listę (key,value) -pairs z dict który jest posortowana według wartości można użyć następującego kodu:

>>> x = {3:2,2:1,1:5} 
>>> sorted(x.items(), key=lambda kv: kv[1]) # Items returns a list of `(key,value)`-pairs 
[(2, 1), (3, 2), (1, 5)] 
+0

@ jwpat7, yeah . Lepszy? –

+0

Dzięki za wyjaśnienie, jak to działa. Bardzo pomocne. – joshmcode

3

ListName.sort() będzie je posortować alfabetycznie. Możesz dodać reverse=False/True w nawiasach, aby odwrócić kolejność pozycji: ListName.sort(reverse=False)

+0

Czy to jest komentarz do Ruby? – allanberry

Powiązane problemy