Сравнение строки с несколькими элементами в Python

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

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

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

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

Ответ 1

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

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

if facility in accepted_strings:
    do_stuff()

Тестирование на локализацию в наборе в среднем равно O (1).

Ответ 2

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

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

if facility in accepted_strings:
    do_stuff()

Ответ 3

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

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

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