web-dev-qa-db-ja.com

Pythonで文字列を複数のアイテムと比較する

facilityという文字列を複数の可能な文字列と比較して、有効かどうかをテストしています。有効な文字列は次のとおりです。

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

これを行う効率的な方法はありますか:

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

OTOH、文字列のリストが本当にひどいほど長い場合は、セットを使用します。

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

if facility in accepted_strings:
    do_stuff()

セット内の包含のテストは、O(1)平均でです。

35
pillmuncher

文字列のリストがひどく長くならない限り、次のようなものがおそらく最善です:

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

if facility in accepted_strings:
    do_stuff()
11
waffle paradox

文字列が多くの文字列のいずれかに一致するかどうかを効率的に確認するには、次のようにします。

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

set() sは、ハッシュされた、順序付けされていないアイテムのコレクションであり、特定のアイテムがアイテム内にあるかどうかを判断するために最適化されています。

2
Colin Valliant