Как вывести все нужные числа в функции пайтон
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
def min5(a):
for el in a:
while el < 5:
return el
print(min5(lst))
Выводит только первое число
Ответы (5 шт):
Используйте yield вместо return, ну и не while, а if, конечно. И результат ещё нужно будет "развернуть", например оператором *:
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
def min5(a):
for el in a:
if el < 5:
yield el
print(*min5(lst))
# 1 1 2 3
Можно воспользоваться списковым включением:
def min5(list_):
return [item for item in list_ if item < 5]
print(min5([1, 3, 7, 4, 5, 0])) # [1, 3, 4, 0]
Что за списковые включения?
Списковое включение (List Comprehension) - Краткая синтаксическая конструкция для создания списков. Своего рода "синтаксический сахар"
[ <Выражения для каждого> for <Элемента> in <Из последовательности> ]
В них также можно использовать условия:
[ <Выражения для каждого> for <Элемента> in <Из последовательности> if <Условие отбора>]
Они на самом деле мощнее, чем кажутся и это явно не весь функционал, на который они способны. Но ваши условия это покрывает
Можно просто создать список, добавлять в него, а затем вернуть:
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
def min5(a):
result = []
for el in a:
if el < 5:
result.append(el)
return result
print(min5(lst))
Вывод:
[1, 1, 2, 3]
Ну или через generator expression
def min5(a):
return (num for num in a if num < 5)
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
print(*min5(lst))
result
1 1 2 3
Ваша проблема состоит в том, что команда первая встреча команды return — вопреки тому, что она находится в цикле — по своей природе прекращает вес вызов функции. Второй встречи этой команды к сожалению уже не будет.
И так
- вместо команды
return elиспользуйтеprint(el), и затем - вместо
print(min5(lst))примените простоmin5(lst).