繁体   English   中英

检查列表保留顺序列表中的子列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM