Pythonの「in」セット演算子


143

inセットのpython 演算子について少し混乱しています。

私が設定している場合sや、いくつかのインスタンスをb、それが事実であるb in s手段は、「いくつかの要素があるxs、このようなb == xですが、true」?


77
あなたは数学者ですか?単純なことを過度に複雑な方法で説明する;)
ThiefMaster

13
コンピュータ科学者。ドキュメントに「sのメンバーシップについてxをテストする」と書かれているため、少し混乱しています。私にとっては、「インスタンスxがsに含まれている」または「xと同じ値を持つインスタンスがsに存在する」ことを意味する可能性があります。これが同一性比較か平等比較かはわかりません。
デジャス

6
@Dejas:Pythonには2つの演算子の等価比較と同一性比較があることを知っているので、それぞれを確認する実験を構築できるはずです。その実験を投稿していただければ助かります。
S.Lott、2012年

回答:


101

はい、しかしそれは意味するhash(b) == hash(x)ので、アイテムの同等性はそれらを同じにするのに十分ではありません。


14
それでは、「sにhash(b)== hash(x)およびx == bとなるような要素xはありますか?」
デジャス

12
誰かが彼のクラスのハッシュ関数をねじれた方法で実装した場合、これは彼が得ることができる(そしてそれに値する)ものです。
ugoren 2012年

84

そのとおり。あなたはこのようにインタプリタでそれを試すことができます:

>>> a_set = set(['a', 'b', 'c'])

>>> 'a' in a_set
True

>>>'d' in a_set
False

2
文字列定数はしばしばインターンされるので、これはあまり良いテストではありません(試してくださいa = 'a'; b = 'a'; a is b)。a = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])代わりに試してみました。
Philipp

11

はい、それはそう意味することができます、またはそれは単純なイテレータになることができます。例:イテレーターとしての例:

a=set(['1','2','3'])
for x in a:
 print ('This set contains the value ' + x)

同様に、チェックとして:

a=set('ILovePython')
if 'I' in a:
 print ('There is an "I" in here')

編集済み:リストや文字列ではなくセットを含むように編集されました


2
これはセットと何の関係がありますか?
Ignacio Vazquez-Abrams

リストや文字列でさえ、セットと同様のプロパティを持つと考えることができると思います。それらは要素のコレクションです。
Arnab Ghosal 2012年

1
いいえ、セットには、シーケンスが含まない包含チェックの追加条件があります。
Ignacio Vazquez-Abrams

3

文字列はset型ではありませんが、inスクリプトでの検証中に貴重なプロパティがあります。

yn = input("Are you sure you want to do this? ")
if yn in "yes":
    #accepts 'y' OR 'e' OR 's' OR 'ye' OR 'es' OR 'yes'
    return True
return False

inこれがこの例でのの使用をよりよく理解するのに役立つことを願っています。


2
それはセットではありません。文字列も変更可能ではありません。
Ignacio Vazquez-Abrams

7
... or 'e' or 'es' or 's'。この無意味に間違った答えを削除することを検討してください。
Quuxplusone 2014

3

セットはdictsとは異なる動作をするため、issubset()のようなセット演算を使用する必要があります。

>>> k
{'ip': '123.123.123.123', 'pw': 'test1234', 'port': 1234, 'debug': True}
>>> set('ip,port,pw'.split(',')).issubset(set(k.keys()))
True
>>> set('ip,port,pw'.split(',')) in set(k.keys())
False

それは面白い。そして、素晴らしい現実のアプリケーションも。
Armstrongest
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.