#python #return #boolean-expression
#python #Возврат #логическое выражение
Вопрос:
Проблема в этом:
Учитывая массив целых чисел, верните True, если последовательность чисел 1, 2, 3 где-то появляется в массиве.
Можно найти здесь:
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, 2, 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, 2, 3])
Это не работает и всегда возвращает True, даже если тестовые примеры показывают, что этого не должно быть. Что я делаю не так? Если для этого невозможно выполнить возврат в одну строку, почему?
Ответ №1:
Вы предоставляете bool
объект генератора, и, насколько я знаю, генераторы всегда правдивы.
Вы хотите any
здесь вместо bool
:
return any(nums[i: i 3] == [1, 2, 3] for i in range(len(nums) - 2))
Комментарии:
1. Вам не нужно
True for
. Условие if можно переместить в начало.any(nums[i:i 3] == [1, 2, 3] for i in range(len(nums) - 2))
2. Carcigenicate и @FrankYellin спасибо за помощь до сих пор. Я пробовал ваши решения, но они все еще не работают. Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке «any», которое не определено. Сработало ли это решение на их веб-сайте для вас?
3. Что вы подразумеваете под «когда я пытаюсь [скомпилировать]»? Вы используете Python? any() — это встроенная функция.
4. @LogicallySpeakingLaura Я не могу придумать, как
any
не было бы определено, если только они явно не запретили это для этой задачи.5. Нет, я имею в виду, когда пытаюсь отправить решение на их веб-сайте, а не в среде разработки Python. Может быть, они просто не примут его по какой-то причине.