web-dev-qa-db-ja.com

Python:あるセットに別のセットが完全に含まれているかどうかを確認しますか?

あるセットに別のセットが完全に含まれているかどうかをすばやく確認する方法はありますか?

何かのようなもの:

>>>[1, 2, 3].containsAll([2, 1])
True

>>>[1, 2, 3].containsAll([3, 5, 9])
False
67
Nick Heiner

これらはリストですが、本当にセットを意味する場合は、issubsetメソッドを使用できます。

>>> s = set([1,2,3])
>>> t = set([1,2])
>>> t.issubset(s)
True
>>> s.issuperset(t)
True

リストについては、各要素をチェックするよりもうまくやることはできません。

107
danben

完全を期すために、これはissubsetと同等です(ただし、明示的/読み取り可能性はやや劣りますが)。

>>> set([1,2,3]) >= set([2,1])
True
>>> set([1,2,3]) >= set([3,5,9])
False
31
ChristopheD

1つのオプションはそのままです-減算:

>>> {1, 2} - {1, 2, 3}
set([])
>>> {1, 2, 3} - {1, 2}
set([3])

基本的に、最初のリストのどの要素が2番目のリストにないかを確認します。

欠落している値を表示できるため、非常に便利です。

>>> def check_contains(a, b):
...     diff = a - b
...     if not diff:
...         # All elements from a are present in b
...         return True
...     print('Some elements are missing: {}'.format(diff))
...     return False
...
>>> check_contains({1, 2}, {1, 2, 3})
True
>>> check_contains({1, 2, 3}, {1, 2})
Some elements are missing: set([3])
False
4

セットが別のセットのサブセットであると疑われ、それらの2つのセットを交差させた場合、サブセットである場合、結果はそれ自体と等しくなります。

a = [2,1,3,3]
b = [5,4,3,2,1]
set(a).intersection(set(b)) == set(a)
>>True
3

set.issubset() または set.issuperset() (または演算子ベースの対応:<=および>=)。メソッドは引数として任意の反復可能を受け入れるだけでなく、セットとして受け入れることに注意してください。

>>> {1, 2}.issubset([1, 2, 3])
True
>>> {1, 2, 3}.issuperset([1, 2])
True

ただし、演​​算子を使用する場合は、両方の引数を設定する必要があります。

>>> {1, 2} <= {1, 2, 3}
True
>>> {1, 2, 3} >= {1, 2}
True
1
Eugene Yarmash

以下の関数は、メインリストにサブリストが完全に含まれていない場合は0を返し、完全に含まれている場合は1を返します。

def islistsubset(sublist,mainlist):
     for item in sublist:
             if item in mainlist:
                     contains = 1
             else:
                     contains = 0
                     break;
     return contains
0
>>> set([1,2,3]).issuperset(set([2,1]))
True 
>>>    
>>> set([1,2,3]).issuperset(set([3,5,9]))
False
0
Mamata