![](/img/trans.png)
[英]Indent-Expected errors while trying to write one-line list comprehension: if-else variants
[英]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.