列表是另一个列表的子集

5 投票
2 回答
6394 浏览
提问于 2025-04-16 20:15

在Python中,给定两个包含成对元素的列表:

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

你怎么能高效地写一个Python函数,来判断listB是否是listA的子集呢?哦,还有,[1,20]这个对和[20,1]是等价的。

2 个回答

8

为了提供一个不同的选择,或许使用元组和集合会更有效率:

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

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

撰写回答