猿问

如何验证一个列表是否是另一个列表的子集?

我需要验证列表是否是另一个列表的子集-我想要的只是布尔返回值。

在相交之后在较小列表上测试相等性是最快的方法吗?鉴于需要比较的数据集数量,性能至关重要。

根据讨论添加更多事实:

  1. 在许多测试中,两个列表中的两个列表是否相同?它作为静态查找表之一来执行。

  2. 需要列表吗?事实并非如此-静态查找表可以是执行效果最好的任何内容。动态命令是一个字典,我们从中提取密钥以执行静态查找。

在这种情况下,最佳解决方案是什么?


一只萌萌小番薯
浏览 702回答 3
3回答

Helenr

Python为此提供的性能函数是set.issubset。但是,它确实有一些限制,使其不清楚是否是您问题的答案。列表可能包含多个项目并具有特定顺序。一套没有。为了实现高性能集,只能在可哈希对象上工作。您是在询问子集还是子序列(这意味着您需要一个字符串搜索算法)?在许多测试中,两个列表中的两个列表是否相同?列表中包含哪些数据类型?而且,这是否需要列出清单?您的其他帖子与字典和列表相交,使类型更清晰,并且确实推荐使用字典键视图来实现类似集合的功能。在那种情况下,之所以可以工作是因为字典键的行为就像一个集合(以至于在我们使用Python进行集合之前,我们都使用字典)。一个人想知道问题如何在三个小时内变得不那么具体。

凤凰求蛊

>>> 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']>>>&nbsp;>>> set(a) <= set(b)True>>> set(c) <= set(b)False

哔哔one

假设项目是可哈希的>>> 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)个项目要进行迭代和检查。
随时随地看视频慕课网APP

相关分类

Python
我要回答