簡體   English   中英

使用列表理解創建 def

[英]Create def with list comprehension

我嘗試使用列表理解而不是標准循環在 python 中定義 function。 在這里,我想編寫一個 function, get_index(CS, alpha) ,它將列表 CS 和閾值 alpha 作為輸入並返回第一個元素的 position,索引,例如CS[index] > alpha

例如:

CS = [0, 0, 0, 0, 1, 0, 1, 4, 9, 8, 12, 13, 12, 10, 9, 7, 9]

alpha = 12

assert get_index(CS, alpha) == 11

如果在 CS 中未找到此類元素,則 function 應返回 -1。

我的以下代碼由於SyntaxError: invalid syntax而失敗。

def get_index(CS, alpha):
    return i for i, v in enumerate(CS) if v > alpha
    return -1

但如果我把它放在一個標准循環中,它就可以工作,比如:

def get_index(CS, alpha):
    for i, v in enumerate(CS):
        if v > alpha: 
            return i
    return -1

我無法區分並試圖找出原因。 欣賞你的想法。 謝謝你。

如果您真的希望為此使用列表推導,請執行以下操作:

def get_index(CS, alpha):
    l = [i for i, v in enumerate(CS) if v > alpha] or [-1]
    return l[0]

盡管出於多種原因,您的第二個代碼要好得多。

發生語法錯誤,因為不允許在 function 內有兩個無條件返回。

您可以使用生成器表達式,它類似於列表推導式,但不會創建列表。

調用next會評估生成器,直到找到第一個結果,如果沒有,則引發StopIteration

try:
    return next(i for i, v in enumerate(CS) if v > alpha)
except StopIteration:
    return -1

暫無
暫無

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

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