在這段代碼中,必須對元組進行排序,但我問用戶想要什么樣的排序,但這個問題被問了四次:
students = (("st_1", "a", "40"),
("st_2", "b", "38"),
("st_3", "c", "32"),
("st_4", "a", "10"))
def key_sort(keys):
index = 0
what_sort = input("do you sort a list ? n for name , g for grade and a for age : ").lower()
if what_sort == 'a':
index = keys[2]
elif what_sort == 'n':
index = keys[0]
elif what_sort == 'g':
index = keys[1]
return index
sorted_students = sorted(students, key=key_sort)
for i in sorted_students:
print(i)
為什么要問四次? 最終結果
uj5u.com熱心網友回復:
先詢問,然后構造一個適當的函式傳遞給sorted.
from operator import itemgetter
what_sort = input("do you sort a list ? n for name , g for grade and a for age : ").lower()
if what_sort == 'a':
n = 2
elif what_sort == 'n':
n = 0
elif what_sort == 'g':
n = 1
else:
n = 0 # Pick a good default
sorted_students = sorted(students, key=itemgetter(n))
uj5u.com熱心網友回復:
key=key_sort意味著對于每個 item key,該sorted()函式將呼叫key_sort(key)以確定該鍵的排序順序。您input()在該函式中有一個,如果串列中有 4 個專案,則表示key_sort()將被呼叫 4 次。它只是 Python 按設計作業。如果您希望輸入不是每次都運行,則必須使用某種條件。或者,你會更有意義是要求的排序方法事前,然后設定一個類或全域變數what_sort是key_sort那么的用途。
uj5u.com熱心網友回復:
正如@Joran Beasley指出的那樣,key引數 insorted被呼叫到要排序的迭代中的每個元素(在你的情況下是變數students)。
獲得您所要求的行為的一種方法是修改key_sort函式以回傳另一個函式,該函式應該用作呼叫中的key引數sorted。
請考慮以下代碼
students = (("st_1", "a", "40"),
("st_2", "b", "38"),
("st_3", "c", "32"),
("st_4", "a", "10"))
def key_sort():
index = 0
what_sort = input("do you sort a list ? n for name , g for grade and a for age : ").lower()
if what_sort == 'a':
index = 2
elif what_sort == 'n':
index = 0
elif what_sort == 'g':
index = 1
return lambda student: student[index]
key_fn = key_sort()
sorted_students = sorted(students, key=key_fn)
for i in sorted_students:
print(i)
這樣,用戶互動(input函式呼叫)將只運行一次。
uj5u.com熱心網友回復:
函式中的key引數sorted是用于獲取要排序的值的函式的名稱。例如,在整數串列中,這是不必要的,因為當然可以直接比較和排序物件本身。但是對于元組,尚不清楚應該如何比較它們。使用第一個元素?最后一個?所有這些的哈希?Python 無法回答這個問題。key存在,因此您可以指定如何執行此操作。
您的特定問題的解決方案是首先詢問用戶問題,然后使用他們的答案來選擇如何對串列進行排序。有很多方法可以做到這一點,但這是我認為最簡單的方法。
students = (("st_1", "a", "40"),
("st_2", "b", "38"),
("st_3", "c", "32"),
("st_4", "a", "10"))
def get_name(student):
return student[0]
def get_grade(student):
return student[1]
def get_age(student):
return student[2]
sort_index = input("How should the list be sorted? (n for name , g for grade and a for age) : ").lower()
if sort_index == 'n':
sorted_students = sorted(students, key=get_name)
elif sort_index == 'g':
sorted_students = sorted(students, key=get_grade)
elif sort_index == 'a':
sorted_students = sorted(students, key=get_age)
else:
print('Unsupported option')
exit(1)
print(sorted_students)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407410.html
標籤:
上一篇:我如何計算字串?
