计算列表中的字符串列表

时间:2017-11-28 14:21:12

标签: python list numpy

我有两个清单:

bigList = [["A1.1", "A2.1", "A3.1", "A4.1"], ["A3.1", "A4.1", "A5.1"], ["A4.1", "A5.1"]] 
smallList = ["A4.1", "A5.1"]

Python中最快的方法是计算bigList(列表)包含smallList的次数。

目前,正确答案是2。 也许我应该使用Numpy数组?

2 个答案:

答案 0 :(得分:1)

您可以使用set方法issubset

enter image description here

  

语法:

A.issubset(B)

从issubset()返回值

  

issubset()返回

True if A is a subset of B
False if A is not a subset of B

bigList = [["A1.1", "A2.1", "A3.1", "A4.1"], ["A3.1", "A4.1", "A5.1"], ["A4.1", "A5.1"]]
smallList = ["A4.1", "A5.1"]

count={}

track=1
for sub_list in bigList:
    if set(smallList).issubset(sub_list):
        if tuple(smallList) not in count:
            count[tuple(smallList)]=track
        else:
            count[tuple(smallList)]+=1

print(count)
  

输出:

{('A4.1', 'A5.1'): 2}

答案 1 :(得分:0)

要检查列表是否完全包含其他列表,我们可以使用集合比较:

set(smallerList) <= set(biggerList)

如果True的所有元素都包含在smallerList的集合中,则会返回biggerList。请注意,此方法检查是否包含单个项目而不是订单 - 哪些集合不考虑。因此,如果序列顺序很重要,则无法使用它。

从这里我们可以使用简单的列表理解来检查bigList的所有集合并应用上述检查。然后我们只sum增加包含较小集合的集合数量(如果是匹配则我们加1,否则加0)。

count = sum([1 if set(smallList) <= set(bigList) else 0 for x in bigList])

正如 N指出的那样。 Ivanov - 这将根据bigList中包含的子列表的数量线性扩展。