Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一个列表包含另一个重复的列表_Python_List_Contains - Fatal编程技术网

Python 一个列表包含另一个重复的列表

Python 一个列表包含另一个重复的列表,python,list,contains,Python,List,Contains,我需要检查一个列表是否包含python中另一个列表的每个元素。不完全是set操作,因为在set中会考虑不同的值。我怎么做 样本: a是较大的列表,b是较小的集合 a = [1, 1, 2, 4], b = [1, 2, 3] -> False a = [1, 1, 2, 3], b = [1, 2, 3] -> True a = [1, 2, 4], b = [1, 2, 1] -> False // Because b has two 1s but a has only on

我需要检查一个列表是否包含python中另一个列表的每个元素。不完全是set操作,因为在set中会考虑不同的值。我怎么做

样本: a是较大的列表,b是较小的集合

a = [1, 1, 2, 4], b = [1, 2, 3] -> False
a = [1, 1, 2, 3], b = [1, 2, 3] -> True
a = [1, 2, 4], b = [1, 2, 1] -> False // Because b has two 1s but a has only one.
我想请你仔细看看第三个案子

[N.B.]我确切地知道如何通过散列映射来实现。但我想要体积更小的。

def包含(a,b):
from collections import Counter

def is_contained(a,b):
    aCount = Counter(a)
    bCount = Counter(b)
    return all(aCount[x] >= bCount[x] for x in bCount)



>>> is_contained([1, 1, 2, 4],[1, 2, 3])
False
>>> is_contained([1, 1, 2, 3], [1, 2, 3])
True
>>> is_contained([1, 2, 4],  [1, 2, 1])
False
对于集合(a)中的项目: 如果项目在集合(b)中: 打印“某事或做某事”

def包含(a,b):
from collections import Counter

def is_contained(a, b):
    aCount = Counter(a)
    bCount = Counter(b)
    # think of it as aCount >= bCount in set-operations
    return aCount & bCount == bCount
对于集合(a)中的项目: 如果项目在集合(b)中:
打印“某事或做某事”

一个带有
计数器的简单单行程序

from collections import Counter

def is_contained(a, b):
    aCount = Counter(a)
    bCount = Counter(b)
    # think of it as aCount >= bCount in set-operations
    return aCount & bCount == bCount
def isin(a, b): return not (Counter(b) - Counter(a))
演示:


带有
计数器的简单单行程序

def isin(a, b): return not (Counter(b) - Counter(a))
演示:



@不幸的是,这不起作用<代码>计数器([1,1])@svk:啊,你说得对。我以为有一些重载运算符可以让您执行此操作,但事实似乎并非如此。是否可以使用multiset的任何选项?@Blender不幸的是,这不起作用<代码>计数器([1,1])@svk:啊,你说得对。我以为有一些重载操作符可以让你这么做,但事实似乎并非如此。有没有可用的multiset选项?有多糟糕?知道时间复杂性吗?到目前为止还不错。测试了一些案例。如果问题再次发生,我会让你们知道的。顺便说一句,multiset有任何选项可用吗?如果性能有问题,这可能会稍微快一点
all(aCount[x]>=bcountx代表x,bCount.iteritems()中的bcountx)
+1对于使用计数器…。@Md.TaufiqueHussain,计数器解决方案为O(n),这在本例中是最好的。@DhruvPathak I对计数器类进行了进一步的研究,并提供了交点。因此,您可以在函数中使用
返回aCount&bCount==bCount
。这会有多糟?知道时间复杂性吗?到目前为止还不错。测试了一些案例。如果问题再次发生,我会让你们知道的。顺便说一句,multiset有任何选项可用吗?如果性能有问题,这可能会稍微快一点
all(aCount[x]>=bcountx代表x,bCount.iteritems()中的bcountx)
+1对于使用计数器…。@Md.TaufiqueHussain,计数器解决方案为O(n),这在本例中是最好的。@DhruvPathak I对计数器类进行了进一步的研究,并提供了交点。因此,您可以在函数中使用
return aCount&bCount==bCount
。看,我提到的set操作不是我想要的。看,我提到的set操作不是我想要的。非常优雅,我喜欢它。它很管用,但我是python新手。所以请善意地解释一下。顺便问一下,这里的复杂性是什么?看起来像O(1),但这取决于计数器(),我不知道它的确切功能。您可以在该行获得更多信息,首先构建两个计数器的交集,这意味着对于两个计数器中的每个计数键,它的出现次数最少。如果a包含b,则此计数器交点(或称之为最小值)必须为
bCount
。将其与此
set
-语句进行比较:
setA&setB==setB
表示可以添加与
setB@koffein计数器相同的计数器,请参见我的answer@alko是的,我明白了。我想减去一个count-bCount,然后寻找负的“值”,但我没有想到bCount-aCount…花了一些时间思考,但没有想到最简单的一个…非常优雅,我喜欢它。它奏效了,但我是python新手。所以请善意地解释一下。顺便问一下,这里的复杂性是什么?看起来像O(1),但这取决于计数器(),我不知道它的确切功能。您可以在该行获得更多信息,首先构建两个计数器的交集,这意味着对于两个计数器中的每个计数键,它的出现次数最少。如果a包含b,则此计数器交点(或称之为最小值)必须为
bCount
。将其与此
set
-语句进行比较:
setA&setB==setB
表示可以添加与
setB@koffein计数器相同的计数器,请参见我的answer@alko是的,我明白了。我想减去一个计数,然后寻找负的“值”,但我没有想到一个计数…花了一些时间思考,但没有想到最简单的一个…+1它是如此简单,优雅,现在我明白了为什么没有必要
=
+1它是如此简单,优雅,现在我明白了为什么不需要
=