2 回答

TA貢獻1851條經驗 獲得超3個贊
key
in 參數sort
接受一個函數。你可以這樣想:如果key
提供了,那么輸入的可迭代對象將被排序,就好像key
應用于每個元素一樣。
tuples
按第一個元素排序,然后是第二個元素,依此類推。在這種情況下, key 函數將 iterable 中的所有元素轉換為tuples
,其中如果數字在優先級組中,則第一個元素為 0,否則為 1。
這意味著,由于sort
默認升序,所有優先級數字將排在第一位,并且它們將在內部按升序排序。
為了說明,您可以將過程視為具有以下步驟:
從...開始
[8, 3, 1, 2, 5, 4, 7, 6]
申請
key
獲得:
[(1, 8), (0, 3), (1, 1), (0, 2), (0, 5), (1, 4), (0, 7), (1, 6)]
將結果按升序排序得到:
[(0, 2), (0, 3), (0, 5), (0, 7), (1, 1), (1, 4), (1, 6), (1, 8)]
取原始數據的相應元素(在這種情況下,是 的第二個元素
tuple
,盡管因為這是基于索引的,所以不需要從鍵函數的輸出中恢復原始元素):
[2, 3, 5, 7, 1, 4, 6, 8]

TA貢獻1895條經驗 獲得超7個贊
helper函數 insort_priority_0確保首先對組中的元素按升序排序,然后將其余元素按升序排序,如下所示。
print(sort_priority_0(numbers,{2, 3, 5, 7}))
#[2, 3, 5, 7, 1, 4, 6, 8]
print(sort_priority_0(numbers,{4, 2, 5, 8}))
#[2, 4, 5, 8, 1, 3, 6, 7]
print(sort_priority_0(numbers,{6, 4, 5, 1}))
#[1, 4, 5, 6, 2, 3, 7, 8]
返回0,x組中的元素確保這些元素在排序時被推到列表的前面,其余元素通過 推到列表的后半部分1,x,然后按升序排序,因為排序發生在0和1,然后在數字內
添加回答
舉報