为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2019-11-26 10:39:29
我需要验证列表是否是另一个列表的子集-我想要的只是布尔返回值。在相交之后在较小列表上测试相等性是最快的方法吗?鉴于需要比较的数据集数量,性能至关重要。根据讨论添加更多事实:在许多测试中,两个列表中的两个列表是否相同?它作为静态查找表之一来执行。需要列表吗?事实并非如此-静态查找表可以是执行效果最好的任何内容。动态命令是一个字典,我们从中提取密钥以执行静态查找。在这种情况下,最佳解决方案是什么?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

Python为此提供的性能函数是set.issubset。但是,它确实有一些限制,使其不清楚是否是您问题的答案。


列表可能包含多个项目并具有特定顺序。一套没有。为了实现高性能集,只能在可哈希对象上工作。


您是在询问子集还是子序列(这意味着您需要一个字符串搜索算法)?在许多测试中,两个列表中的两个列表是否相同?列表中包含哪些数据类型?而且,这是否需要列出清单?


您的其他帖子与字典和列表相交,使类型更清晰,并且确实推荐使用字典键视图来实现类似集合的功能。在那种情况下,之所以可以工作是因为字典键的行为就像一个集合(以至于在我们使用Python进行集合之前,我们都使用字典)。一个人想知道问题如何在三个小时内变得不那么具体。


查看完整回答
反对 回复 2019-11-26
?
凤凰求蛊

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


查看完整回答
反对 回复 2019-11-26
?
哔哔one

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)个项目要进行迭代和检查。


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 682 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信