Найти индекс первого положительного элемента не используя цикл
x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
for i in x:
if i > 0:
print("Перший додатній елемент: ", i)
break
print(x.index(i))
Я написал этот код, но узнал что нельзя использовать цикл. Как найти индекс только первого положительного элемента?
Ответы (4 шт):
Автор решения: Sergey
→ Ссылка
Во первых, у Вас действительно есть синтаксическая ошибка. Надо писать так:
print(x.index(i))
Ну а по сути, без цикла можно задачу решить так:
x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
b = list(filter(lambda z: z > 0, x))
print(b[0])
Автор решения: NykSu
→ Ссылка
Или можно решить вот так:
from functools import reduce
x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
b = reduce(lambda a, b: a + b if a==0 and b>0 else a, x, 0)
print(b)
Если нужен индекс. а не значение, то лямбду подправить на: lambda a, b: a + x.index(b), остальное без изменений.
Автор решения: Danis
→ Ссылка
в ответе от участника Sergey, берутся все положительные значения, хотя лучше взять только первое
x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
b = next(filter(lambda z: z > 0, x))
print(b)
Автор решения: Stanislav Volodarskiy
→ Ссылка
Ищем индекс первого положительного элемента: enumerate выдаёт пары (индекс, значение), if из них отбирает положительные значения, next отбирает только первый индекс.
x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
print(next(i for i, v in enumerate(x) if v > 0))
# ^ ^ ------------------------ --------
# | | ^ ^
# | | | отбираем только положительные значения
# | | |
# | | перебираем пары (индекс, значение)
# | |
# | значение не нужно, возвращаем только индекс
# |
# все индексы не нужны, только первый
Результат:
@>>> x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
@>>> print(*enumerate(x))
(0, -3) (1, -5) (2, 3) (3, 4) (4, -4) (5, 2) (6, -2) (7, -6) (8, 5)
@>>> print(*((i, v) for i, v in enumerate(x)))
(0, -3) (1, -5) (2, 3) (3, 4) (4, -4) (5, 2) (6, -2) (7, -6) (8, 5)
@>>> print(*((i, v) for i, v in enumerate(x) if v > 0))
(2, 3) (3, 4) (5, 2) (8, 5)
@>>> print(*(i for i, v in enumerate(x) if v > 0))
2 3 5 8
@>>> print(next(i for i, v in enumerate(x) if v > 0))
2