2013-05-16 52 views

Odpowiedz

9

Tworzenie krotki jako klucz Zamiast:

>>> sorted(lst, key=lambda L: (L.lower(), L)) 
['A', 'a', 'B', 'b'] 

Oznacza to, że kolejność sortowania małymi literami nie zmienia ('a', 'a') ale oznacza pierwszy klucz do górnego pojemnika wkłada jej poziom z dolną równoważny -case, następnie sortuje się przed nim: np ('a', 'A') < ('a', 'a')

+0

idealnym rozwiązaniem. Przepraszam za mój poprzedni komentarz braintead :) –

+0

Jeśli masz napisy w języku innym niż angielski, bądź ostrożny z metodami, które polegają na użyciu '.lower()' do sortowania bez rozróżniania wielkości liter, działają tylko dla zestawu znaków ASCII. Odpowiedni sposób polega na odrobinie manipulowania przy ustawieniach regionalnych. – wim

+0

Na przykład to rozwiązanie nie działa dla 'lst = ['á', 'b', 'B', 'Á']' na pythonie 2 (prawdopodobnie będzie na python3) – wim

3

Ciekawe jak taka lista powinna uporządkować następujące listy

lst = ['abb', 'ABB', 'aBa', 'AbA'] 

Proponowane rozwiązanie wytwarzać następujące wyniki

>>> sorted(lst, key=lambda L: (L.lower(), L)) 
['AbA', 'aBa', 'ABB', 'abb'] 

można zaproponowanie bardziej skomplikowane rozwiązanie z różnym skutkiem

>>> sorted(lst, key=lambda a: sum(([a[:i].lower(), 
            a[:i]] for i in range(1, len(a)+1)),[])) 
['ABB', 'AbA', 'aBa', 'abb'] 
+0

Dobry pomysł, ale wyrażenie może być prostsze - jak o '[ord (x) + 31,5 * x.isupper() dla x w a] '? – georg

Powiązane problemy