9

私はしばしば次のようなコードを書くことになります

if x == 1 or x == 5 or x == 10 or x == 22 :
    pass

英語では繰り返し続けるxのは冗長に思えますが、そのようなifステートメントを書き出すためのより簡単なまたはより短い方法はありますか?

xタプルなどにの値の存在を確認しているのでは( 1, 5, 10, 22, )ないでしょうか。

4

3 に答える 3

14

はい、あなたは正しいです-タプルまたは(このチェックが繰り返し行われる場合)セットのいずれかです。

だからどちらか

if x in (1, 5, 10, 22):
    pass

または、このチェックを頻繁に行い、値の数が十分に多い場合は、

myset = set((1, 5, 10, 22))

[...]

if x in myset:
    pass

内容が便利であるほど、mysetチェックする値が多くなります。4つの値はかなり少ないので、単純に保つことができます。400の値とあなたはセットを使用する必要があります...

Marcinが指摘しているように、もう1つの側面は、セット内のルックアップに必要なハッシュです。これは、リストまたはタプルで目的の値を線形検索するよりもコストがかかる場合があります。

于 2012-04-08T18:51:10.790 に答える
6

コレクションで使用できますin

if x in [1, 5, 10, 22]:
     # etc...

if x in {1, 5, 10, 22}:  # New syntax for creating sets  
     # etc...

これにより、行が実行されるたびに新しいリストが作成されることに注意してください。効率が懸念される場合は、コレクションを1回だけ作成し、再利用します。

于 2012-04-08T18:48:50.447 に答える
2

優れたパフォーマンスが必要で、同じ比較を数回繰り返す場合は、次のセットを使用します。

s = frozenset([1, 5, 10, 22]) # at the beginning

if x in s: # in your code
    pass
于 2012-04-08T18:51:41.010 に答える