Сравнение строки с несколькими элементами в Python - PullRequest
13 голосов
/ 27 июля 2011

Я пытаюсь сравнить строку с именем facility с несколькими возможными строками, чтобы проверить, является ли она действительной. Допустимые строки:

auth, authpriv, daemon, cron, ftp, lpr, kern, mail, news, syslog, user, uucp, local0, ... , local7

Есть ли эффективный способ сделать это, кроме:

if facility == "auth" or facility == "authpriv" ...

Ответы [ 3 ]

29 голосов
/ 27 июля 2011

Если, OTOH, ваш список строк действительно ужасно длинный, используйте набор:

accepted_strings = {'auth', 'authpriv', 'daemon'}

if facility in accepted_strings:
    do_stuff()

Тестирование на содержание в наборе в среднем равно O (1).

10 голосов
/ 27 июля 2011

Если ваш список строк не будет ужасно длинным, что-то вроде этого, вероятно, лучше:

accepted_strings = ['auth', 'authpriv', 'daemon'] # etc etc 

if facility in accepted_strings:
    do_stuff()
2 голосов
/ 27 июля 2011

Чтобы эффективно проверить, соответствует ли строка одному из множества, используйте это:

allowed = set(('a', 'b', 'c'))
if foo in allowed:
    bar()

set() s хэшированы, неупорядоченные коллекции элементов оптимизированы для определения, находится ли в них данный элемент.

...