问题描述
问题是这样的:
给出一个整数数组,如果数字1、2、3的序列出现在数组中的某个地方,则返回True。
可以在这里找到
https://codingbat.com/prob/p193604
has_seq = False
for i in range(len(nums) - 2):
if nums[i: i + 3] == [1,2,3]: # do indexes i .. i + 3 equal 1,3
has_seq = True
break # exit loop if condition met
return has_seq
我正在尝试将其转换为一行返回,到目前为止,我的代码是这样的:
return bool(True for i in range(len(nums) - 2) if nums[i: i + 3] == [1,3])
这不起作用,即使测试用例表明不应该,也总是返回True。我究竟做错了什么?如果无法为此返回一行,为什么?
解决方法
您要给bool
一个生成器对象,据我所知,生成器始终是真实的。
您要在这里any
而不是bool
:
return any(nums[i: i + 3] == [1,2,3] for i in range(len(nums) - 2))