I’m trying to compare a string called facility to multiple possible strings to test if it is valid. The valid strings are:
auth, authpriv, daemon, cron, ftp, lpr, kern, mail, news, syslog, user, uucp, local0, ... , local7
Is there an efficient way of doing this other than:
if facility == "auth" or facility == "authpriv" ...
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
If, OTOH, your list of strings is indeed hideously long, use a set:
accepted_strings = {'auth', 'authpriv', 'daemon'}
if facility in accepted_strings:
do_stuff()
Testing for containment in a set is O(1) on average.
Method 2
Unless your list of strings gets hideously long, something like this is probably best:
accepted_strings = ['auth', 'authpriv', 'daemon'] # etc etc
if facility in accepted_strings:
do_stuff()
Method 3
To efficiently check if a string matches one of many, use this:
allowed = set(('a', 'b', 'c'))
if foo in allowed:
bar()
set()s are hashed, unordered collections of items optimized for determining whether a given item is in them.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0