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

2024-03-28 17:11:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,每个列表都包含一些单词。每个列表不必与其他列表长度相同。基本上:

wordlist = [ ['cat', 'sheep', 'dog', 'pig', 'tomato'], ['apple', 'orange', 'sheep', 'dog' 'tomato'], ['cat', 'apple', 'sheep', 'tomato', 'dog'], ['garlic', 'tomato', 'dog' ]

我还创建了一个可以在所有列表中找到的常用词列表,对于上面的示例,它是:

common = ['sheep','dog', 'tomato']

我现在想检查一下,对于一个列表,如果常用词以某种顺序出现,那么在哪些列表中这些词以相同的顺序出现。例如,在列表1中,常用词的顺序为['sheep','dog'],而在列表2中的顺序相同,因此我应该返回:

list1: list2

在list3中,['tomato','dog']按顺序出现,在list4中也出现,所以这两个被映射。总输出如下:

list1: list2
list2: list1
list3: list4
list4: list3

如果list1与其他列表有顺序的公共子列表,它将打印为list1:list2、list5、list7等等。它应该适用于所有子列表。你知道吗

有办法吗?你知道吗


Tags: apple列表顺序单词catdogwordlistpig
1条回答
网友
1楼 · 发布于 2024-03-28 17:11:05

解决方案取决于您希望从列表中得到什么值。你知道吗

如果有可能重复一个值,并且需要检查测试容器中是否有足够的值,那么下面是一个时间效率低下的解决方案:

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

相关问题 更多 >