我知道 Python 有一個非常好的函式 sorted() ,但我想實作我自己的函式來理解邏輯。 我有一個字串串列,我想先按長度對它們進行排序,然后按字母順序排序。 例如,
輸入:
['daring','adequate','bold','bait','cold','beautiful']
輸出:
['bait','bold','cold','daring','adequate','beautiful']
如何構建執行此操作的函式?
我開始構建一個簡單的快速排序功能,僅按字母順序排序,但現在我想不出一種有效的方法來從它開始一次包含 2 個鍵。這是代碼:(假設字串都在一種情況下)
def quick_sort(sequence):
length = len(sequence)
if length <=1:
return sequence
else:
pivot = sequence.pop()
items_greater = []
items_lower = []
for item in sequence:
if item >pivot:
items_greater.append(item)
else:
items_lower.append(item)
return quick_sort(items_lower) [pivot] quick_sort(items_greater)
print(quick_sort(['daring','adequate','bold','bait','cold','beautiful']))
TLDR:如何將其變成長度/字母排序?謝謝
uj5u.com熱心網友回復:
您可以實作一個比較函式,以您定義的方式比較任意兩個值。
def compare(a, b):
if len(a) != len(b):
return len(a) > len(b)
else:
return a > b
def quick_sort(sequence):
length = len(sequence)
if length <= 1:
return sequence
else:
pivot = sequence.pop()
items_greater = []
items_lower = []
for item in sequence:
if compare(item, pivot):
items_greater.append(item)
else:
items_lower.append(item)
return quick_sort(items_lower) [pivot] quick_sort(items_greater)
print(quick_sort(['daring', 'adequate', 'bold', 'bait', 'cold', 'beautiful']))
這將列印
['bait', 'bold', 'cold', 'daring', 'adequate', 'beautiful']
uj5u.com熱心網友回復:
您可以通過添加一個“關鍵函式”來做到這一點,該函式將一個專案映射到一個元組 (item_length, item) 之前,并在您的演算法中使用樞軸。例如:
def quick_sort(sequence, key_fn):
length = len(sequence)
if length <=1:
return sequence
else:
pivot = sequence.pop()
items_greater = []
items_lower = []
for item in sequence:
if key_fn(item) > key_fn(pivot):
items_greater.append(item)
else:
items_lower.append(item)
return quick_sort(items_lower, key_fn) [pivot] quick_sort(items_greater, key_fn)
print(quick_sort(['daring','adequate','bold','bait','cold','beautiful'], lambda e: (len(e),e)))
將回傳
['bait', 'bold', 'cold', 'daring', 'adequate', 'beautiful']
uj5u.com熱心網友回復:
假設您只關心基于每個單詞的第一個字母的字母順序,這就是您可以將其寫入快速排序函式的方式。
def quick_sort(sequence):
length = len(sequence)
if length <=1:
return sequence
else:
pivot = sequence.pop()
items_greater = []
items_lower = []
for item in sequence:
if item[0] > pivot[0]:
if item[0] == pivot[0]:
if len(item) > pivot:
items_greater.append(item)
else:
items_lower.append(item)
items_greater.append(item)
else:
items_lower.append(item)
return quick_sort(items_lower) [pivot] quick_sort(items_greater)
print(quick_sort(['daring','adequate','bold','bait','cold','beautiful']))
回傳
['adequate', 'bold', 'bait', 'beautiful', 'cold', 'daring']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529481.html
標籤:Python排序快速排序
上一篇:Python程式給我左邊的數字和右邊的總和,同時在每行中交換符號,直到n(n=6)
下一篇:在熊貓的單列中有不同的排序順序
