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] 它不起作用,因为它正在按顺序检查数字

如果您有关于如何实现的想法或解决方案,请告诉我

回答

您可以使用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)


以上是Python-检查数字列表中包含数字列表的次数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>