将字符串与Python中的多个项目进行比较

n0p*_*0pe 15 python string string-comparison

我正在尝试将一个被调用的字符串facility与多个可能的字符串进行比较来测试它是否有效.有效字符串是:

auth, authpriv, daemon, cron, ftp, lpr, kern, mail, news, syslog, user, uucp, local0, ... , local7
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法来做到这一点:

if facility == "auth" or facility == "authpriv" ...
Run Code Online (Sandbox Code Playgroud)

pil*_*her 32

如果,OTOH,你的字符串列表确实很长,请使用一组:

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

if facility in accepted_strings:
    do_stuff()
Run Code Online (Sandbox Code Playgroud)

集合中的遏制测试平均为O(1).

  • 在python2.7/3中,您可以编写`accepted_strings = {'auth','authpriv','daemon'}`,这样在构建集合之前不会创建任何列表. (3认同)
  • 在更现代的 Python 中,通过将测试内联到 `iffacility in {'auth', 'authpriv', 'daemon'}:` 中,您会受益匪浅(只要所有选项都是常量文字,就像在本例中一样);当执行此操作的函数被编译并存储在函数的常量中时,它将转换为“frozenset”,每次到达“accepted_strings = {'auth','authpriv','daemon”时都会重建“set” '}` 行。 (2认同)

waf*_*dox 10

除非您的字符串列表变得非常长,否则这样的事情可能是最好的:

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

if facility in accepted_strings:
    do_stuff()
Run Code Online (Sandbox Code Playgroud)