Вопрос-Ответ

Comparing a string to multiple items in Python [duplicate]

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

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

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

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

if facility == "auth" or facility == "authpriv" ...
Переведено автоматически
Ответ 1

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

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()это хэшированные, неупорядоченные коллекции элементов, оптимизированные для определения, есть ли в них данный элемент.

python string