проверка Python, есть ли слово в определенных элементах списка - PullRequest
4 голосов
/ 12 марта 2012

Мне было интересно, есть ли лучший способ поставить:

if word==wordList[0] or word==wordList[2] or word==wordList[3] or word==worldList[4]

Ответы [ 3 ]

7 голосов
/ 12 марта 2012
word in wordList

Или, если вы хотите сначала проверить 4,

word in wordList[:4]
6 голосов
/ 12 марта 2012

Очень простая задача, и так много способов с ней справиться.Захватывающе!Вот что я думаю:

Если вы точно знаете, что wordList мал (иначе он может быть слишком неэффективным), тогда я рекомендую использовать этот:

b = word in (wordList[:1] + wordList[2:])

В противном случаеЯ бы вероятно пошел бы на это (тем не менее, это зависит!):

b = word in (w for i, w in enumerate(wordList) if i != 1)

Например, если вы хотите игнорировать несколько индексов:

ignore = frozenset([5, 17])
b = word in (w for i, w in enumerate(wordList) if i not in ignore)

Этоявляется питоническим и масштабируется.


Однако, есть примечательные альтернативы:

### Constructing a tuple ad-hoc. Easy to read/understand, but doesn't scale.
# Note lack of index 1.
b = word in (wordList[0], wordList[2], wordList[3], wordList[4])

### Playing around with iterators. Scales, but rather hard to understand.
from itertools import chain, islice
b = word in chain(islice(wordList, None, 1), islice(wordList, 2, None))

### More efficient, if condition is to be evaluated many times in a loop.
from itertools import chain
words = frozenset(chain(wordList[:1], wordList[2:]))
b = word in words
1 голос
/ 12 марта 2012

Пусть indexList будет списком признаков, которые вы хотите проверить (т. Е. [0,2,3]), а wordList будет всеми словами, которые вы хотите проверить. Затем следующая команда вернет 0-й, 2-й и 3-й элементы wordList в виде списка:

[wordList[i] for i in indexList]

Это вернет [wordList[0], wordList[2], wordList[3]].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...