首页 > 解决方案 > 测试列表 A 是否包含在列表 B 中

问题描述

我有两个列表A& B,我想测试是否A包含在B. “包含”是指 的元素以A完全相同的顺序出现在其中B,它们之间没有其他元素。我正在寻找的与A in B如果它们是字符串的行为非常相似。

的某些元素A将被重复。我们可以假设A会比 短B

SO上有很多类似问题的答案,但大多数回答不同的问题:

如果该操作被实现为关键字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 中执行此操作?我是否遗漏了一些可以让我更快找到答案的重要术语?

标签: pythonlistcontains

解决方案


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

推荐阅读