我發現了這個 edabit 挑戰(挑戰鏈接):
創建一個函式,該函式接受一個數字串列 lst、一個字串 s 并根據以下規則回傳一個數字串列:
"Asc" 回傳按升序排序的串列。“Des”按降序回傳一個排序串列。“無”回傳一個沒有任何修改的串列。
有人 Evgeny SH 提出了這個解決方案:
def asc_des_none(lst, s):
return sorted(lst, reverse=s == 'Des') if s else lst
你能解釋一下 sorted(...) 部分是如何作業的嗎?提前致謝!
uj5u.com熱心網友回復:
def asc_des_none(lst, s):
return sorted(lst, reverse=s == 'Des') if s else lst
該sorted函式對一個可迭代物件(例如一個串列)進行排序并輸出一個排序后的副本。它可以接受一個reverse引數,設定為True或False。如果True如果將輸出串列按降序排列。
因此,如果s == "Desc",串列將按降序排序。
另一部分… if s else lst將運行…是s真的,否則將輸出不變的lst。真實物件是非空數字、非空字串,而不是 None。
我認為你的朋友想利用 None 是假的這一事實,但在這里,因為我們實際上有“None”,這是行不通的。
如果真的“無”字串不應該觸發任何更改,則正確的代碼應該是:
def asc_des_none(lst, s):
return sorted(lst, reverse=s == 'Des') if s !="None" else lst
uj5u.com熱心網友回復:
sorted() 回傳串列的排序副本。
該函式可以表示為
def asc_des_none(lst, s):
if s:
if s == "Des":
return sorted(lst, reverse=True)
return sorted(lst, reverse=False)
return lst
嚴格來說,它不符合規范所說的,因為如果 s 不是一個假值,它將按升序回傳串列。
為了嚴格遵守規范,它應該是這樣的
def asc_des_none(lst, s):
if s == "Des":
return sorted(lst, reverse=True)
if s == "Asc":
return sorted(lst, reverse=False)
if s is None:
return lst
raise ValueError(f"`s` must be Asc, Des, or None; not {s!r}")
或類似。
uj5u.com熱心網友回復:
目標是生成一個布林值,指示串列是否應該反向排序 (when s == 'Des') 或不排序(when s != 'Des'),或者根本不應該對串列進行排序。
我會在如何s處理上更嚴格一些。我將允許三個可能的值:任何其他值都會產生一個ValueError.
def asc_des_none(lst, s):
if s is None:
return lst
try:
rev = {'Asc': False, 'Des': True}[s]
except KeyError:
raise ValueError(f"Unrecognized sorting direction '{s}'")
return sorted(lst, reverse=rev)
uj5u.com熱心網友回復:
排序函式的語法是
sorted(iterable, key=None, reverse=False)
其中 iterable 是我們的 lst。默認情況下為 False的另一個引數reverse按升序對 lst 進行排序,但如果給 reverse 賦予 True 值,我們的排序函式將按降序對 lst 進行排序, In reverse=s == 'Des',如果 s 的值,則s == 'Des'評估為 true是 Des 依次按降序對我們的 lst 進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323887.html
