CodingBat Python预热2阵列123,单行解决方案不起作用

问题描述

问题是这样的:

给出一个整数数组,如果数字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))