Python не все в работе - PullRequest
       18

Python не все в работе

3 голосов
/ 14 января 2010

Как проверить, является ли список подмножеством большего списка.

т.е.

a = [1,2,3] является подмножеством b = [1,2,3,4,5,6]

Могу ли я сделать что-то вроде

if a all in b

Ответы [ 3 ]

12 голосов
/ 14 января 2010
5 голосов
/ 14 января 2010
>>> a = set([1, 2, 3])
>>> b = set([1, 2, 3, 4, 5, 6])
>>> a.issubset(b)
True

или

>>> a = [1, 2, 3]
>>> b = [1, 2, 3, 4, 5, 6]
>>> all(map(lambda x: x in b, a))
True
>>> a = [1, 2, 3, 9]
>>> all(map(lambda x: x in b, a))
False

или (если количество элементов важно)

>>> a = [1, 1, 2, 3]
>>> all(map(lambda x: a.count(x) <= b.count(x), a))
False
2 голосов
/ 14 января 2010

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

if all(x in b for x in a):
    pass

если вас волнует количество повторяющихся элементов, эта опция кажется хорошей, и вы можете оптимизировать ее, сортируя c и используя bisect:

def all_in(a, b)
    try:
        c = b[:]
        for x in a: c.remove[x]
        return True
    except:
        return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...