我想比較 def cmp_names(name1, name2) 中串列中的每個姓氏:
def bubble_sort(L, func):
end = len(L)
for i in range(end-1):
for j in range(end-1-i):
i1 = (end-1) - (j 1)
i2 = (end-1) - j
if func(L[i1], L[i2]):
L[i1],L[i2] = L[i2],L[i1]
return L
def cmp_names(name1, name2):
N = []
for name in N:
name = name.split(" ")
firsname = name[0]
lastname = name[1]
if name1.lastname == name2.lastname:
name1 = name1.firsname > name2.firsname
return name1
else:
name2 = name1.lastname < name2.lastname
return name2
return name1, name2
def main():
N = ["Chris Terman","Daseong Han","Tom Grimson","Eric Herman","Joseph Shin", "John Brady"]
N = bubble_sort(N, cmp_names)
print(N)
main()
此串列的結果將按姓氏排序 ["John Brady","Tom Grimson","Daseong Han","Eric Herman","Joseph Shin","Chris Terman"]
uj5u.com熱心網友回復:
對bubble sort您來說,最簡單的方法是繼續迭代,直到有 0 個交換。因此,使用 while 回圈并迭代串列的長度并在每次進行交換時遞增交換計數器。
def bubble_sort(L, func):
while True:
swaps = 0
for i in range(1, len(L)):
if func(L[i-1], L[i]):
L[i-1],L[i] = L[i],L[i-1]
swaps = 1
if swaps == 0:
break
return L
然后對于您的比較功能,您需要做的就是比較姓氏。因此,只需拆分每個名稱并將它們相互比較。
例如:
def cmp_names(name1, name2) -> bool:
return name1.split(' ')[1] > name2.split(' ')[1]
輸出:
['John Brady', 'Tom Grimson', 'Daseong Han', 'Eric Herman', 'Joseph Shin', 'Chris Terman']
當然,您可以避免所有這些,而只使用 sorted 函式:
print(sorted(N, key=lambda x: x.split(' ')[1]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/524709.html
上一篇:將元素移動到物件陣列的頂部
下一篇:從另一個不同型別的比較器創建
