Подтвердить что ты не робот

Python: см., Если один набор содержит другое полностью?

Есть ли быстрый способ проверить, содержит ли один набор другой другой?

Что-то вроде:

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

>>>[1, 2, 3].containsAll([3, 5, 9])
False
4b9b3361

Ответ 1

Это списки, но если вы действительно имеете в виду множество, вы можете использовать метод issubset.

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

Для списка вы не сможете сделать лучше, чем проверять каждый элемент.

Ответ 2

Для полноты: это эквивалентно issubset (хотя, возможно, бит менее явный/читаемый):

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

Ответ 3

Один параметр остается нетронутым - вычитание:

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

В основном вы проверяете, какие элементы в первом списке не во втором списке.

Мне было очень удобно, так как вы могли показать, какие значения отсутствуют:

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

Если вы подозреваете, что набор является подмножеством другого, и пересекаете эти два набора вместе, результат равен самому себе, если он является подмножеством.

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

Ответ 5

Вы можете использовать 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

Ответ 6

Ниже функция возвращает 0, если основной список не содержит подписок полностью и 1, если он полностью содержит.

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

Ответ 7

>>> set([1,2,3]).issuperset(set([2,1]))
True 
>>>    
>>> set([1,2,3]).issuperset(set([3,5,9]))
False