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

29 投票
3 回答
71704 浏览
提问于 2025-04-16 22:20

我正在尝试将一个叫做 facility 的字符串与多个可能的字符串进行比较,以测试它是否有效。有效的字符串有:

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

除了下面这种方法,还有没有更有效的方式来实现这个呢:

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

3 个回答

3

为了高效地检查一个字符串是否与多个字符串中的某一个匹配,可以使用这个方法:

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

set() 是一种经过优化的集合,它可以快速判断某个项目是否在其中。这种集合是无序的,并且会对里面的项目进行哈希处理。

11

除非你的字符串列表变得非常长,否则像这样做可能是最好的选择:

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

if facility in accepted_strings:
    do_stuff()
63

如果你的字符串列表真的非常长,那就用集合(set)吧:

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

if facility in accepted_strings:
    do_stuff()

在集合中检查一个元素是否存在,平均来说是O(1)的速度,也就是说非常快。

撰写回答