Что касается вашего первого вопроса: этот код прекрасно работает и должен работать, если 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)
Последний вернет генератор, который вы можете представить как некий ленивый список, который будет создан только после того, как вы выполните его итерацию. Кстати, первый точно соответствует
matches = filter(fulfills_some_condition, lst)
в Python 2. Здесь вы можете увидеть функции высшего порядка в работе. В Python 3 filter
возвращает не список, а объект, похожий на генератор.
Нахождение первого вхождения
Если вам нужно только первое, что соответствует условию (но вы еще не знаете, что это такое), можно использовать цикл for (возможно, также с помощью else
предложения, которое не очень хорошо известно). Вы также можете использовать
next(x for x in lst if ...)
который вернет первое совпадение или поднимет a, 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]
myList
.