[解決済み] 2つの集合の和は、すべての項目を含んでいない
2023-02-28 10:08:40
質問
下の組合の2つのセットの順番を変えると、どうして違う結果になるのでしょうか?
set1 = {1, 2, 3}
set2 = {True, False}
print(set1 | set2)
# {False, 1, 2, 3}
print(set2 | set1)
#{False, True, 2, 3}
どのように解決するのですか?
なぜunion()はすべての項目を含まないのですか?
この
1
と
True
は同等であり、重複とみなされます。 同様に
0
と
False
も同様に等価です。
>>> 1 == True
True
>>> 0 == False
True
どの等価値を使うか
複数の等価値がある場合、最初に見たものを保持します。
>>> {0, False}
{0}
>>> {False, 0}
{False}
値を区別できるようにする方法
値を区別して扱うには、単に値を
(value, type)
のペアで保存します。
>>> set1 = {(1, int), (2, int), (3, int)}
>>> set2 = {(True, bool), (False, bool)}
>>> set1 | set2
{(3, <class 'int'>), (1, <class 'int'>), (2, <class 'int'>),
(True, <class 'bool'>), (False, <class 'bool'>)}
>>> set1 & set2
set()
値を区別するもう一つの方法は、文字列として保存することです。
>>> set1 = {'1', '2', '3'}
>>> set2 = {'True', 'False'}
>>> set1 | set2
{'2', '3', 'False', 'True', '1'}
>>> set1 & set2
set()
これで謎が解け、進むべき道が見えるといいのですが :-)
コメントから救出。
これは、クロスタイプの等価性を破るための標準的な手法です(つまり
0.0 == 0
,
True == 1
そして
Decimal(8.5) == 8.5)
. このテクニックは Python 2.7 の正規表現モジュールで、unicode 正規表現が他の同等の str 正規表現と区別してキャッシュされるように強制するために使われています。このテクニックは Python 3 の functools.lru_cache() で typed パラメータが true のときにも使われます。
もしOPがデフォルトの等価関係以外のものを必要とするならば、何か新しい関係を定義する必要があります。使用事例によっては、文字列の大文字と小文字の区別、Unicode の正規化、視覚的外観 (異なるものは異なると見なされる)、同一性 (2 つの異なるオブジェクトは等しいと見なされない)、値/型のペア、または等価関係を定義する他の関数があります。OP の具体的な例を考えると、彼/彼女は型による区別か視覚的な区別のどちらかを期待していたようです。
関連
-
[解決済み] argparseによるブーリアン値のパース
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] テキストファイルを文字列変数に読み込んで、改行を除去するには?
-
[解決済み] print()を使用してクラスのインスタンスを表示するには?
-
[解決済み】Pythonで2つの変数の論理xorを取得するにはどうすればいいですか?
-
[解決済み】ilocとlocはどう違うのですか?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複