[英]python helper functions and return statements
下面的函數(sort_priority_0)對數字列表進行排序,但將一組數字優先排序。 return語句中元組的目的是什么?
numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = {2, 3, 5, 7}
def sort_priority_0(values, group):
def helper(x):
if x in group:
return 0, x
return 1, x
values.sort(key=helper)
python sort_priority_0.py
[2, 3, 5, 7, 1, 4, 6, 8]
如果我修改函數並刪除元組,則排序按升序進行。 請解釋為什么在return語句中有和沒有元組的情況下,行為都有如此大的不同?
def sort_priority_1(values, group):
def helper(x):
if x in group:
return x
return x
values.sort(key=helper)
python sort_priority.py
[1, 2, 3, 4, 5, 6, 7, 8]
sort
的key
參數具有功能。 您可以這樣想:如果提供了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]
sort_priority_0
可以在sort_priority_0
使用helper
函數,確保首先將組中的元素按升序排序,然后將其余元素按升序排序。
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
,然后在數字之內
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.