Python中的一个子集,因为对两个名单:
列表是另一个列表
listA = [ [1,20], [3,19], [37,11], [21,17] ]
listB = [ [1,20], [21,17] ]
你如何高效地编写Python函数返回True如果数组listB是listA的一个子集?哦和[1,20]对相当于[20,1]
Python中的一个子集,因为对两个名单:
列表是另一个列表
listA = [ [1,20], [3,19], [37,11], [21,17] ]
listB = [ [1,20], [21,17] ]
你如何高效地编写Python函数返回True如果数组listB是listA的一个子集?哦和[1,20]对相当于[20,1]
使用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
+1 - 最好使用内置方法而不是重新发明轮子! –
只是为了提供一种替代,可能使用的元组,并设置是更有效的:
>>> set(map(tuple,listB)) <= set(map(tuple,listA))
True
是[[1,20],[2,30]等于[[2, 30],[1,20]]? – Trevor
这些列表是否可以包含任何内容,或者它们是否总是包含数字?如果总是数字,这些数字总会是正数吗? –
@ sean-vieira - 是的,数字总是正面的;和@threed - 订单无关紧要,因此这些清单相当于 – dimka