あるセットに別のセットが完全に含まれているかどうかをすばやく確認する方法はありますか?
何かのようなもの:
>>>[1, 2, 3].containsAll([2, 1])
True
>>>[1, 2, 3].containsAll([3, 5, 9])
False
これらはリストですが、本当にセットを意味する場合は、issubsetメソッドを使用できます。
>>> s = set([1,2,3])
>>> t = set([1,2])
>>> t.issubset(s)
True
>>> s.issuperset(t)
True
リストについては、各要素をチェックするよりもうまくやることはできません。
完全を期すために、これはissubset
と同等です(ただし、明示的/読み取り可能性はやや劣りますが)。
>>> set([1,2,3]) >= set([2,1])
True
>>> set([1,2,3]) >= set([3,5,9])
False
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
セットが別のセットのサブセットであると疑われ、それらの2つのセットを交差させた場合、サブセットである場合、結果はそれ自体と等しくなります。
a = [2,1,3,3]
b = [5,4,3,2,1]
set(a).intersection(set(b)) == set(a)
>>True
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
以下の関数は、メインリストにサブリストが完全に含まれていない場合は0を返し、完全に含まれている場合は1を返します。
def islistsubset(sublist,mainlist):
for item in sublist:
if item in mainlist:
contains = 1
else:
contains = 0
break;
return contains
>>> set([1,2,3]).issuperset(set([2,1]))
True
>>>
>>> set([1,2,3]).issuperset(set([3,5,9]))
False