Heim >Backend-Entwicklung >Python-Tutorial >Eine kurze Diskussion zum Sortieren in Python
Sortierfunktionen werden häufig in Programmen verwendet. Python bietet Sortier- und Sortierfunktionen, wobei eine Sortierung an Ort und Stelle erfolgt und die andere das neue Ergebnis zurückgibt Sortierung
1. Parameter
Funktionsprototyp:
sort([cmp[, key[, reverse]]])
bedeutet, dass die Sortiermethode drei Parameter akzeptiert, die alle weggelassen werden können. Die Standardeinstellung ist aufsteigende Reihenfolge.
Der erste Parameter cmp ist eine Vergleichsfunktion zum Vergleichen zweier Parameter (Elemente einer Liste, z. B. Ganzzahlen). Die Methode ist sehr intuitiv, aber für den Vergleich benutzerdefinierter Typen müssen Sie die Vergleichsfunktion selbst definieren. Die Funktion gibt 0 zurück, was bedeutet, dass die beiden Zahlen gleich sind, und eine negative Zahl, was bedeutet, dass der erste Parameter kleiner ist. und der erste Parameter ist hinter dem zweiten Parameter angeordnet.
Der zweite Parameterschlüssel ist das Attribut des Vergleichslistenelements.
Der dritte Parameter reverse ist vom Typ bool, was bedeutet, ob umgekehrt (in umgekehrter Reihenfolge sortiert) werden soll
①, cmp-Parameterbeispiel:
#cmp 函数,两个数倒过来比较 注!只能在python2.0上运行 s = [1, 2, 3, 4, 5] s.sort(cmp=lambda a, b:cmp(b, a)) print s # [5, 4, 3, 2, 1]
②, Gemeinsame Parametertaste, umgekehrte Verwendungsmethode, Code:
# key 指定排序方式 reverse 是否反排序 li = ['x11','abc323','e26','112ddd','fstgd2'] li.sort(key=len,reverse=True) # 用长度进行排序,从大到小进行排序 print(li) # ['abc323', '112ddd', 'fstgd2', 'x11', 'e26'] li.sort(key=lambda x:x[-1]) # key可以指定lambada函数x为列表中每个元素 print(li) # 元素的最后一个字符进行排序 # ['x11', 'fstgd2', 'abc323', 'e26', '112ddd'] li = zip(range(10),range(10)[::-1]) # 列表中元素为元祖是排序 print(li,type(li)) # <zip object at 0x000000E7F75504C8> <class 'zip'> li = list(li) print(li) # [(0, 9), (1, 8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)] li.sort(key=lambda x:x[-1]) print(li) # [(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)] #**注!默认sort也是会对列表中元祖进行排序的 li.sort() print(li) # (0, 9), (1, 8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)]
Der Parameterschlüssel kann sein: key=int, key=len, key=lambda...
2. Sortieren
① So geben Sie ein Diktat aus: Zu groß entsprechend dem Wert des Schlüsselwerts in?
dic = {'z':1, 'y':4,'x':2,'g':3,'sg':3} dic= sorted(dic.items(),key=lambda x:x[1]) print(dic) # [('z', 1), ('x', 2), ('sg', 3), ('g', 3), ('y', 4)]
Nach dem Sortieren ins Wörterbuch konvertieren:
from collections import OrderedDict dic = {'z':1, 'y':4,'x':2,'g':3,'sg':3} dic= OrderedDict(sorted(dic.items(),key=lambda x:x[1])) print dic # OrderedDict([('z', 1), ('x', 2), ('sg', 3), ('g', 3), ('y', 4)]) for k,v in dic.items(): print k,v # z 1 # x 2 # sg 3 # g 3 # y 4
②, Angenommen, eine Zeichenfolge enthält nur Groß- und Kleinbuchstaben und Zahlen, sortieren Sie sie, um sicherzustellen, dass:
Alle Kleinbuchstaben in Großbuchstaben geschrieben sind
Alle Buchstaben vor Zahlen
Alle ungeraden Zahlen vor geraden Zahlen Vorne
s = "Sorting1234" def sort_str(x): # x 传入的每个元素 if x.isdigit(): if int(x) % 2 == 0: return (4,x) # 返回的是元祖,元祖可进行排序 return (3,x) elif x.islower(): return (0,x) elif x.isupper(): return (1,x) li = sorted(s,key=sort_str) print(li) # ['g', 'i', 'n', 'o', 'r', 't', 'S', '1', '3', '2', '4'] string = ''.join(li) print(string) # ginortS1324
Prägnanterer Code:
s = "Sorting1234" s ="".join(sorted(s, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x))) print(s) # ginortS1324
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zum Sortieren in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!