python - 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)
推荐阅读
- ansible - 从多个 ansible 角色更新同一文件的最佳方法
- database - 当程序 #2 失败并引发错误时,如何阻止程序 #1 显示成功消息?
- com - 有人可以帮助我处理来自 c# dll 的 vb6 中的事件吗
- html - 为什么第二行没有出现?
- javascript - 忽略 Node JS 上已完成函数的异常
- ios - iOS 13 GM 上的 Google 登录失败
- c# - C# 表达式 if 语句,可能的扩展?
- excel - 按域名分隔不同列中的电子邮件地址
- reactjs - 当通过 url 调用第二个组件时,如何将道具从当前组件传递到另一个组件?
- android - 取消 onViewDetachedFromWindow 内特定 ViewHolder 的特定协程