3 回答
TA贡献1780条经验 获得超3个赞
Python为此提供的性能函数是set.issubset。但是,它确实有一些限制,使其不清楚是否是您问题的答案。
列表可能包含多个项目并具有特定顺序。一套没有。为了实现高性能集,只能在可哈希对象上工作。
您是在询问子集还是子序列(这意味着您需要一个字符串搜索算法)?在许多测试中,两个列表中的两个列表是否相同?列表中包含哪些数据类型?而且,这是否需要列出清单?
您的其他帖子与字典和列表相交,使类型更清晰,并且确实推荐使用字典键视图来实现类似集合的功能。在那种情况下,之所以可以工作是因为字典键的行为就像一个集合(以至于在我们使用Python进行集合之前,我们都使用字典)。一个人想知道问题如何在三个小时内变得不那么具体。
TA贡献1825条经验 获得超4个赞
>>> a = [1, 3, 5]
>>> b = [1, 3, 5, 8]
>>> c = [3, 5, 9]
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False
>>> a = ['yes', 'no', 'hmm']
>>> b = ['yes', 'no', 'hmm', 'well']
>>> c = ['sorry', 'no', 'hmm']
>>>
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False
TA贡献1854条经验 获得超8个赞
假设项目是可哈希的
>>> from collections import Counter
>>> not Counter([1, 2]) - Counter([1])
False
>>> not Counter([1, 2]) - Counter([1, 2])
True
>>> not Counter([1, 2, 2]) - Counter([1, 2])
False
如果您不在乎重复的项目,例如 [1, 2, 2]并且[1, 2]然后只需使用:
>>> set([1, 2, 2]).issubset([1, 2])
True
在相交之后在较小列表上测试相等性是最快的方法吗?
.issubset将是最快的方法。在测试之前检查长度issubset不会提高速度,因为您仍然有O(N + M)个项目要进行迭代和检查。
添加回答
举报