Comparando una cadena a varios elementos en Python

Estoy tratando de comparar una cadena llamada facility con varias cadenas posibles para probar si es válida. Las cadenas válidas son:

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

¿Hay una manera eficiente de hacer esto que no sea:

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

Si, OTOH, su lista de cadenas es de hecho espantosamente larga, use un conjunto:

 accepted_strings = {'auth', 'authpriv', 'daemon'} if facility in accepted_strings: do_stuff() 

La prueba de contención en un conjunto es O (1) en promedio.

A menos que tu lista de cadenas se vuelva horriblemente larga, algo como esto es probablemente lo mejor:

 accepted_strings = ['auth', 'authpriv', 'daemon'] # etc etc if facility in accepted_strings: do_stuff() 

Para verificar eficientemente si una cadena coincide con una de muchas, usa esto:

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

set() s set() son hash, colecciones desordenadas de artículos optimizados para determinar si un artículo dado está en ellos.