python - 测试列表 A 是否包含在列表 B 中
问题描述
我有两个列表A
& B
,我想测试是否A
包含在B
. “包含”是指 的元素以A
完全相同的顺序出现在其中B
,它们之间没有其他元素。我正在寻找的与A in B
如果它们是字符串的行为非常相似。
的某些元素A
将被重复。我们可以假设A
会比 短B
。
SO上有很多类似问题的答案,但大多数回答不同的问题:
- 是
A
一个元素B
吗?(不是我的问题:B
是一个平面列表,而不是列表列表。) - 的所有元素都
A
包含在 中B
吗?(不是我的问题:我也关心订单。) - 是
A
一个子列表B
吗?(不是我的问题:我不想知道 的元素是否以A
相同的顺序出现在 中B
,我想知道它们是否完全按照它们在 中的某个位置出现B
。)
如果该操作被实现为关键字containedin
,它的行为将是这样的。
>>> [2, 3, 4] containedin [1, 2, 3, 4, 5]
True
>>> [2, 3, 4] containedin [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
False
>>> [2, 3, 4] containedin [5, 4, 3, 2, 1]
False
>>> [2, 2, 2] containedin [1, 2, 3, 4, 5]
False
>>> [2, 2, 2] containedin [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
False
>>> [2, 2, 2] containedin [1, 1, 1, 2, 2, 2, 3, 3, 3]
True
有没有一种简洁的方法可以在 Python 中执行此操作?我是否遗漏了一些可以让我更快找到答案的重要术语?
解决方案
any
与列表切片一起使用:
def contained_in(lst, sub):
n = len(sub)
return any(sub == lst[i:i+n] for i in range(len(lst)-n+1))
或者,用于join
将两个列表连接到字符串并使用in
运算符:
def contained_in(lst, sub):
return ','.join(map(str, sub)) in ','.join(map(str, lst))
用法:
>>> contained_in([1, 2, 3, 4, 5], [2, 3, 4])
True
>>> contained_in([1, 2, 2, 4, 5], [2, 3, 4])
False
推荐阅读
- operating-system - 操作系统是否针对特定处理器或所有类型的处理器设计?
- django - Django,View类,有两个put方法
- python - Django Modelform 不接受 POST 上的选择
- c - 如何将 const unsigned char* payLoad 转换为 char* 并复制它?
- c++ - 'int border = borderType & ~BORDER_ISOLATED' 变量是什么意思?
- shell - 如何解析用大括号括起来的输出?
- redis - 为什么要使用etcd?我可以使用redis来实现配置管理/服务发现等吗?
- php - 如果 REQUEST_URI 以特定路径开头,.htaccess 重定向并重写 url
- python - 带有日期列表的 Pyspark DF(使用 PANDAS)从今天开始 BACK 1 年
- javascript - 导入 npm 模块作为源代码