9

整数1を既存のセットに追加できません。インタラクティブシェルでは、これが私がやっていることです:

>>> st = {'a', True, 'Vanilla'}
>>> st
{'a', True, 'Vanilla'}
>>> st.add(1)
>>> st
{'a', True, 'Vanilla'}   # Here's the problem; there's no 1, but anything else works
>>> st.add(2)
>>> st
{'a', True, 'Vanilla', 2}

この質問は 2 か月前に投稿されましたが、誤解されていたと思います。Python 3.2.3 を使用しています。

4

5 に答える 5

13
>>> 1 == True
True

あなたの問題は、1Trueが同じ値であるため、1 は「すでにセットに含まれている」ことだと思います。

>>> st
{'a', True, 'Vanilla'}
>>> 1 in st
True

数学演算Trueでは、それ自体が次のように扱われ1ます。

>>> 5 + True
6
>>> True * 2
2
>>> 3. / (True + True)
1.5

True は bool で、1 は int ですが:

>>> type(True)
<class 'bool'>
>>> type(1)
<class 'int'>

True を返すので1 in st、問題はないと思います。非常に微妙な結果ですが。さらに読むことに興味がある場合は、@Lattywareがこの問題を詳しく説明しているPEP 285を参照してください。

于 2012-05-02T18:56:32.887 に答える
3

確かではありませんが、によって同じ要素と見なされているためhash(1) == hash(True)、. そのままではそうあるべきではないと思いますが、追加できない理由を説明していると思います。1 == Trueset1 is TrueFalse

于 2012-05-02T18:56:50.800 に答える
1

1Trueは trueを1 == True返すと同等です。その結果、1セットは重複を持つことができないため、 の挿入は拒否されます。

于 2012-05-02T18:58:00.743 に答える
0

誰かがさらに研究に興味がある場合は、ここにいくつかのリンクがあります。

ブール値をintとして使用するのはPythonicですか?

https://stackoverflow.com/a/2764099/1355722

于 2012-05-02T20:38:16.120 に答える