[英]Checking for sublists in list of lists preserving sequence
我有一个列表列表,其中每个列表包含一定数量的单词。 每个列表的长度不必与其他每个列表相同。 基本上:
wordlist = [ ['cat', 'sheep', 'dog', 'pig', 'tomato'], ['apple', 'orange', 'sheep', 'dog' 'tomato'], ['cat', 'apple', 'sheep', 'tomato', 'dog'], ['garlic', 'tomato', 'dog' ]
我还创建了一个常见单词列表,可以在所有列表中找到该单词,对于上面的示例,它将是:
common = ['sheep','dog', 'tomato']
我现在想检查一下,对于一个列表,如果常见单词以某种顺序出现,那么其他列表中这些单词以相同顺序出现。 例如,在list1中,常用词以['sheep','dog']的顺序出现,并且相同的顺序在list2中出现,所以我应该返回:
list1: list2
在list3 ['tomato','dog']中依次出现,并且在list4中也是如此,因此将这两个映射。 总输出如下:
list1: list2
list2: list1
list3: list4
list4: list3
如果list1具有与其他列表依序排列的公用子列表,则它将打印为list1:list2,list5,list7,依此类推。 它应该适用于所有子列表。
有办法吗?
解决方案取决于您希望从列表中获得什么值。
如果有可能重复一个值,并且您需要检查测试容器中是否有足够的值,那么这是一个时间效率低的解决方案:
def contained(candidate, container):
temp = container[:]
try:
for v in candidate:
temp.remove(v)
return True
except ValueError:
return False
使用以下命令测试此功能:
>>> a = [1,1,2,3]
>>> b = [1,2,3,4,5]
>>> contained(a,b)
False
>>> a = [1,2,3]
>>> contained(a,b)
True
>>> a = [1,1,2,4,4]
>>> b = [1,1,2,2,2,3,4,4,5]
>>> contained(a,b)
True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.