Що стосується вашого першого питання: цей код ідеально чудовий і повинен працювати, якщо 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
повертає не список, а об'єкт, подібний до генератора.
Пошук першого явища
Якщо ви хочете лише перше, що відповідає умові (але ви ще не знаєте, що це ще є), добре використовувати цикл (можливо, також за допомогою цього 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
.