Python 列表是另一个列表的子集

Python 列表是另一个列表的子集,python,list,subset,Python,List,Subset,在Python中,给定两个对列表: listA = [ [1,20], [3,19], [37,11], [21,17] ] listB = [ [1,20], [21,17] ] 如果listB是listA的子集,如何高效地编写返回True的python函数?oh和[1,20]对相当于[20,1]使用冻结集 >>> listA = [ [1,20], [3,19], [37,11], [21,17] ] >>> listB = [ [1,20], [21,

在Python中,给定两个对列表:

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

如果listB是listA的子集,如何高效地编写返回True的python函数?oh和[1,20]对相当于[20,1]

使用
冻结集

>>> 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
listA=[[1,20]、[3,19]、[37,11]、[21,17]] >>>listB=[[1,20],[21,17]] >>>setA=frozenset([listA中元素的frozenset(元素)]) >>>setB=frozenset([listB中元素的frozenset(元素)]) >>>刚毛 frozenset([frozenset([17,21])、frozenset([1,20])、frozenset([11,37])、frozens et([19,3])) >>>挫折 frozenset([frozenset([17,21]),frozenset([1,20]))
>>>setB仅仅为了提供一种替代方法,也许使用tuple和set更有效:

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

>>集合(map(tuple,listB))是[[1,20],[2,30]]等价于[[2,30],[1,20]]?这些列表可以包含任何内容,还是始终包含数字?如果总是数字,这些数字会永远是正的吗?@sean vieira——是的,数字总是正的;和@threed——顺序无关紧要,因此列表相当于+1——使用内置方法比重新发明轮子更好!