web-dev-qa-db-fra.com

Python: voir si un ensemble en contient un autre?

Existe-t-il un moyen rapide de vérifier si un ensemble en contient un autre?

Quelque chose comme:

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

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

Ce sont des listes, mais si vous voulez dire vraiment des ensembles, vous pouvez utiliser la méthode issubset.

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

Pour une liste, vous ne pourrez pas faire mieux que de vérifier chaque élément.

96
danben

Pour être complet, cela équivaut à issubset (même s’il est un peu moins explicite/lisible)

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

Peut-être excessif, mais une autre variante:.

En d'autres termes: Si la cardinalité d'un ensemble en question est égale à la cardinalité résultante de son ensemble coupé d'un autre ensemble, il s'agit alors d'un sous-ensemble de cet ensemble.

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

Une option est laissée intacte - soustraction:

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

Fondamentalement, vous vérifiez quels éléments de la première liste ne sont pas dans la deuxième liste.

Je l’ai trouvé très pratique car vous pouvez montrer quelles valeurs manquent:

>>> 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
Artem Skoretskiy

La fonction ci-dessous renvoie 0 si la liste principale ne contient pas la sous-liste et 1 si elle est entièrement.

def islistsubset(sublist,mainlist):
     for item in sublist:
             if item in mainlist:
                     contains = 1
             else:
                     contains = 0
                     break;
     return contains
0
Bobin Motti Thomas

Vous pouvez utiliser soit set.issubset() ou set.issuperset() (ou leurs homologues basés sur l'opérateur: <= et >=). Notez que les méthodes accepteront any iterable en tant qu'argument, pas simplement un ensemble:

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

Cependant, si vous utilisez des opérateurs, les deux arguments doivent être des ensembles:

>>> set([2, 1]) <= set([1, 2, 3])
True
>>> set([1, 2, 3]) >= set([2, 1])
True
0
Eugene Yarmash
>>> set([1,2,3]).issuperset(set([2,1]))
True 
>>>    
>>> set([1,2,3]).issuperset(set([3,5,9]))
False
0
Mamata