список является подмножеством другого списка - PullRequest
4 голосов
/ 25 июня 2011

в Python, учитывая два списка пар:

listA = [ [1,20], [3,19], [37,11], [21,17] ]
listB = [ [1,20], [21,17] ]

как эффективно написать функцию python, которая возвращает True, если listB является подмножеством listA? Ох и [1,20] пара эквивалентна [20,1]

Ответы [ 2 ]

11 голосов
/ 25 июня 2011

Использование frozenset.

>>> listA = [ [1,20], [3,19], [37,11], [21,17] ]
>>> listB = [ [1,20], [21,17] ]

>>> setA = frozenset([frozenset(element) for element in listA])
>>> setB = frozenset([frozenset(element) for element in listB])

>>> setA
frozenset([frozenset([17, 21]), frozenset([1, 20]), frozenset([11, 37]), frozens
et([19, 3])])
>>> setB
frozenset([frozenset([17, 21]), frozenset([1, 20])])

>>> setB <= setA
True
8 голосов
/ 26 июня 2011

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

>>> set(map(tuple,listB)) <= set(map(tuple,listA))
True
...