Dan*_*age 8 python contains list
我有两个列表,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
Run Code Online (Sandbox Code Playgroud)
有没有简洁的方法在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))
Run Code Online (Sandbox Code Playgroud)
或者,使用join将两个列表连接到字符串并使用in运算符:
def contained_in(lst, sub):
return ','.join(map(str, sub)) in ','.join(map(str, lst))
Run Code Online (Sandbox Code Playgroud)
用法:
>>> contained_in([1, 2, 3, 4, 5], [2, 3, 4])
True
>>> contained_in([1, 2, 2, 4, 5], [2, 3, 4])
False
Run Code Online (Sandbox Code Playgroud)