簡體   English   中英

python helper函數和return語句

[英]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]

sortkey參數具有功能。 您可以這樣想:如果提供了key ,則可迭代的輸入將被排序,就像將key應用於每個元素一樣

tuples按第一個元素排序,然后按第二個元素排序,依此類推。 在這種情況下,key函數將iterable中的所有元素都轉換為要排序的tuples ,如果數字在優先級組中,則第一個元素為0,否則為1。

這意味着,由於默認情況下sort是升序的,因此所有優先級數字都將排在最前面,並且它們將在內部按升序排序。

為了說明這一點,您可以認為該過程具有以下步驟:

  1. [8, 3, 1, 2, 5, 4, 7, 6]開頭
  2. 應用key獲得:
[(1, 8), (0, 3), (1, 1), (0, 2), (0, 5), (1, 4), (0, 7), (1, 6)]
  1. 將結果按升序排序以得到:
[(0, 2), (0, 3), (0, 5), (0, 7), (1, 1), (1, 4), (1, 6), (1, 8)]
  1. 取原始數據的相應元素(在這種情況下,為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將其余的元素推到列表的后半部分,然后按升序排序,因為排序發生在01 ,然后在數字之內

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM