首页 > 解决方案 > Python - 检查数字列表中包含多少次数字列表

问题描述

谢谢你的帮助

所以,我有一个数字列表

list1 = [
    [1, 2, 3, 4],
    [1, 2, 3],
    [1, 2, 4]
]

现在,我想检查这个列表有多少次:

list2 = [3,1,2]

包含在列表中1

对于此示例,输出应为:

2

我也试过这个:

list1 = [
    [1, 2, 3, 4, 5],
    [1, 2, 4],
    [1, 2, 3, 4],
]


def removeElements(A, B):
    for i in range(len(B)-len(A)+1):
        for j in range(len(A)):
            if B[i + j] != A[j]:
                break
        else:
            return True
    return False


s2 = [1,2]

count = sum(removeElements(sorted(s2), sorted(lst)) for lst in list1)

print(count)

但是如果 s2 = [1,4] 它不起作用,因为它正在按顺序检查数字

如果您对如何实现这一目标有任何想法或解决方案,请告诉我

标签: pythonpython-3.xlist

解决方案


您可以使用sum生成器表达式来计算和sorted比较列表,而不管顺序如何:

s2 = sorted(list2)

count = sum(s2 == sorted(lst) for lst in list1)

或者,如果你是一个实用的人并且喜欢单线:

count = sum(map(sorted(list2).__eq__, map(sorted, list1)))

应该注意到这工作得如此巧妙,因为bool它是 的子类int,并且布尔表达式可以像整数 0 和 1 一样求和。

更新: 由于您澄清了问题并想要计算超集(如果有重复则为超列表),您可以使用Counter相同的减法:

from collections import Counter

c2 = Counter(list2)
count = sum(not (c2-Counter(lst)) for lst in list1)

推荐阅读