Вывести первый положительный элемент списка
x = [-3, -5, 4, 2, -2, -6, 5]
for i in x:
if x[i] > 0:
print(x[i])
Не могу понять что не правильно и почему выводит результат:

Если x = [-3, -5, 3, 4, 2, -2, -6, 5].
Тогда выводит:
Как сделать чтобы в первом случае вывело только 4, а во втором 3
Ответы (6 шт):
x = [-3, -5, 4, 2, -2, -6, 5]
for i in x:
if i > 0:
print(i)
break # Прерывает цикл
i по сути и есть элемент x, а не его индекс. В первой итерации у Вас получается x[-3], во второй x[-5] и тд... Дублирование из за того что x[-5] это 4, и x[2] тоже указывает на 4.
if условие:
#ваш код
break
Тогда программа выйдет из цикла и не будет проверять другие елементы
а попробуйте так:
x = [-3, -5, 4, 2, -2, -6, 5]
print(list(filter(lambda i: i > 0, x))[0])
Можно и такой код, как вариант:
lst = [-3, -5, 4, 2, -2, -6, 5]
print([x for x in lst if x > 0][0])
Хоть выше с циклом быстрее выполнится.
Добавлю функционального изврата, раз уж все пишут разные варианты. )
from operator import lt
from functools import partial
lst = [-3, -5, 4, 2, -2, -6, 5]
print(next(filter(partial(lt, 0), lst)))
Варианты @Zhihar, @NykSu проходят весь список, а достаточно получить только один первый элемент из генератора:
print(next(filter(lambda i: i > 0, x)))