簡體   English   中英

IF-Else 單行理解

[英]IF-Else One-Line Comprehension

這是我的代碼示例:

如果 3 后跟 3,則返回True ,否則返回False下面的代碼就像一個魅力

def has_33(nums):
    for i in range(len(nums)-1):
        if (nums[i] ==3) and (nums[i+1] ==3):
            return True
    return False
has_33([1, 3, 3])

下面的代碼也可以工作:

def has_33(nums):
    return any([(nums[i] ==3) and (nums[i+1] ==3) for i in range(len(nums)-1)])

當我嘗試對這段代碼進行單行理解時,它不起作用:

def has_33(nums):
    return True if (nums[i] ==3) and (nums[i+1] ==3) else False for i in range(len(nums)-1)

has_33([1, 3, 3])

我只是想知道為什么它不起作用以及如何解決它。

展開列表理解代碼,

def has_33(nums):
    for i in range(len(nums) - 1):
        if (nums[i] == 3) and (nums[i+1] == 3):
            return True
        else:
            return False

循環將在第一次迭代后返回。

如果您嘗試使用列表推導,那么以下代碼可以完美運行:

def has_33(nums):
    return   any([True if (nums[i] ==3) and (nums[i+1] ==3) else False  for i in range(len(nums)-1) ])
print(has_33([1, 3, 3]))

問題是您的代碼在第一次迭代期間返回 false,即使之后會有匹配。 有 any() 內聯 function 可以做你想做的事。 https://docs.python.org/fr/3/library/functions.html#any

def has_33(nums):
    return any(num[i]==3 and num[i+1]==3 for i in range(len(nums) - 1)

我像這樣使用列表理解:

def has_33(nums):
    return [(True if (nums[i] ==3) and (nums[i+1] ==3) else False) for i in range(len(nums)-1)]

它在您的示例中返回: [False, True]所以只需檢查列表中是否存在“True”:

def has_33(nums):
    return True in [(True if (nums[i] ==3) and (nums[i+1] ==3) else False) for i in range(len(nums)-1)]

這將返回True / False ,無論3后面是否跟3

暫無
暫無

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

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