5

Python で bag/multiset のようなデータ型が必要です。私はコレクションを理解しています。カウンターはこの目的でよく使用されます。しかし、比較演算子は機能していないようです:

In [1]: from collections import Counter

In [2]: bag1 = Counter(a=1, b=2, c=3)

In [3]: bag2 = Counter(a=2, b=2)

In [4]: bag1 > bag2
Out[4]: True

これは私にはバグのようです。小なり演算子と大なり演算子がセットのようなサブセットとスーパーセットの比較を実行することを期待していました。しかし、その場合はbag1 > bag2false になります。なぜならbag2、extra が含まれているから'a'です。Counter オブジェクトにはサブセット/スーパーセット メソッドもないようです。だから私は2つの質問があります:

  1. Counter オブジェクトに使用される比較ロジックは何ですか?
  2. サブセット、スーパーセット、適切なサブセット、および適切なスーパーセットの Counter オブジェクトを比較するにはどうすればよいですか?
4

2 に答える 2

2

Python 2 では、比較は辞書の既定の並べ替え順序に戻ります(Counterは のサブクラスですdict)。

マッピング (辞書) は、並べ替えられた (キー、値) リストが等しい場合にのみ、等しくなります。[5] 平等以外の結果は一貫して解決されますが、それ以外は定義されません。[6]

Python 3 では、比較により次の値が発生しTypeErrorます。

マッピング (ディクショナリ) は、同じ (キー、値) ペアを持っている場合にのみ、等しいと比較されます。順序比較 ('<'、'<='、'>='、'>') を発生させTypeErrorます。

于 2014-09-04T18:42:21.020 に答える