我有一个列表列表,其中每个列表包含一些单词。每个列表的长度不必与其他列表的长度相同。基本上是:
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等。它适用于所有子列表。
有没有办法做到这一点?
答案 0 :(得分:0)
解决方案取决于您对列表的期望值。
如果有重复值的可能性,并且您需要检查测试容器中是否有足够的值,那么这是一个时间效率低的解决方案:
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