Элемент списка без итерации - PullRequest
0 голосов
/ 13 мая 2009

Я хочу знать, как найти элемент в списке без итерации

Ответы [ 3 ]

9 голосов
/ 13 мая 2009

Метод списка *1001*mylist.index("blah") возвращает индекс первого вхождения элемента "бла":

>>> ["item 1", "blah", "item 3"].index("blah")
1
>>> ["item 1", "item 2", "blah"].index("blah")
2

Это вызовет ValueError, если он не может быть найден:

>>> ["item 1", "item 2", "item 3"].index("not found")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.index(x): x not in list

Вы также можете использовать ключевое слово in, чтобы определить, есть ли элемент в списке (но не в местоположении):

>>> "not found" in ["item 1", "blah", "item 3"]
False
>>> "item 3" in ["item 1", "blah", "item 3"]
True

Как прокомментировал Харпер Шелби, Python все равно придется выполнять внутреннюю итерацию, чтобы найти элементы, но индекс или методы могут быть на немного быстрее, чем в Python, поскольку структуры данных реализованы C .. но что более важно,

"x" in mylist

.. на намного аккуратнее, чем ..

found = False
for cur in mylist:
    if cur == "x":
        found = True
5 голосов
/ 13 мая 2009

Это несколько странный вопрос. Вам нужна горячая линия с $someDeity, или вы хотите, чтобы другая функция выполняла итерацию за вас, или вам нужен более эффективный способ проверки членства?

В первом случае я не могу вам помочь. Во втором случае посмотрите документацию в списках , в частности, метод index. В третьем случае создайте set и используйте ключевое слово in. Обратите внимание, что создание набора окупается, только если вы собираетесь многократно выполнять поиск в списке.

>>> l = [1, 2, 3]
>>> l.index(2)
1
>>> 3 in l
True
>>> ls = set(l)
>>> 3 in ls
True
4 голосов
/ 13 мая 2009

Вы также можете использовать синтаксис in:

>>> l = [1,2,3]
>>> 1 in l
True
...