Что касается вашего первого вопроса: этот код прекрасно работает и должен работать, если item
равен одному из элементов внутри myList
.Возможно, вы пытаетесь найти строку, которая не точно соответствует одному из элементов, или, возможно, вы используете значение с плавающей точкой, которое страдает от неточности.
Что касается вашего второго вопроса: на самом деле есть нескольковозможные способы «поиска» вещей в списках.
Проверка, находится ли что-то внутри
Это описанный вами вариант использования: проверка, находится ли что-то внутри списка или нет.Как вы знаете, вы можете использовать оператор in
для этого:
3 in [1, 2, 3] # => True
Фильтрация коллекции
То есть поиск всех элементов в последовательности, которые удовлетворяют определенному условию.Для этого вы можете использовать списочные выражения или выражения генератора:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Последний вернет generator , который вы можете представить как некий ленивый список, который будет создан, как толькоВы повторяете это.Кстати, первый в точности эквивалентен
matches = filter(fulfills_some_condition, lst)
в Python 2. Здесь вы можете увидеть функции высшего порядка в работе.В Python 3 filter
возвращает не список, а объект, похожий на генератор.
Поиск первого вхождения
Если вы хотите только первое, что соответствует условию (новы еще не знаете, что это такое), можно использовать цикл for (возможно, также с помощью предложения else
, которое не очень хорошо известно).Вы также можете использовать
next(x for x in lst if ...)
, который вернет первое совпадение или поднимет StopIteration
, если ничего не найдено.В качестве альтернативы вы можете использовать
next((x for x in lst if ...), [default value])
Поиск местоположения элемента
Для списков есть также метод index
, который иногда может быть полезен, если вы хотите знать где определенный элемент находится в списке:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Однако учтите, что если у вас есть дубликаты, .index
всегда возвращает самый низкий индекс: ......
[1,2,3,2].index(2) # => 1
Если есть дубликаты и вам нужны все индексы, вы можете использовать enumerate()
вместо:
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]