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)