Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion zum Sortieren in Python

Eine kurze Diskussion zum Sortieren in Python

PHP中文网
PHP中文网Original
2017-06-21 15:25:421122Durchsuche

Ein kurzer Vortrag über das Sortieren

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 &#39;zip&#39;>
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 = {&#39;z&#39;:1, &#39;y&#39;:4,&#39;x&#39;:2,&#39;g&#39;:3,&#39;sg&#39;:3}

dic= sorted(dic.items(),key=lambda x:x[1])
print(dic)
# [(&#39;z&#39;, 1), (&#39;x&#39;, 2), (&#39;sg&#39;, 3), (&#39;g&#39;, 3), (&#39;y&#39;, 4)]

Nach dem Sortieren ins Wörterbuch konvertieren:

from collections import OrderedDict

dic = {&#39;z&#39;:1, &#39;y&#39;:4,&#39;x&#39;:2,&#39;g&#39;:3,&#39;sg&#39;:3}
dic= OrderedDict(sorted(dic.items(),key=lambda x:x[1]))

print dic
# OrderedDict([(&#39;z&#39;, 1), (&#39;x&#39;, 2), (&#39;sg&#39;, 3), (&#39;g&#39;, 3), (&#39;y&#39;, 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)
# [&#39;g&#39;, &#39;i&#39;, &#39;n&#39;, &#39;o&#39;, &#39;r&#39;, &#39;t&#39;, &#39;S&#39;, &#39;1&#39;, &#39;3&#39;, &#39;2&#39;, &#39;4&#39;]
string = &#39;&#39;.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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn