如何检查第一个列表是否以第二个列表中某处的相同顺序出现

时间:2014-10-03 00:03:07

标签: python list

编写一个名为子列表的函数。该函数将2个列表作为参数,如果第一个列表中的项目在第二个列表中的某个位置以相同的顺序出现,则返回True(如果不是,则返回False)

以下是一些例子:

>>> sublist([2, 3], [1, 2, 3, 4, 5]) True
>>> sublist([1, 3], [1, 2, 3, 4, 5]) False
>>> sublist([1, 2, 3], [1, 2, 1, 2, 3, 4]) True 

这是我到目前为止所拥有的:

def sublist(list1,list2):
    for i in range(len(list2)):
        if list2[i] != list1[i]:
            return False
        return True

输出:

>>> sublist([2,3],[1,2,3,4,5])
False
>>> sublist([1,3],[1,2,3,4,5])
True
>>> sublist([1,2,3],[1,2,1,2,3,4])
True

我知道这不完全正确,我知道我将不得不使用[:]来提取字符串或列表的一部分,但我不知道从哪里开始。任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

def sublist(list1, list2):
    n = len(list1)
    return any((list1 == list2[i:i + n]) for i in range(len(list2) - n + 1))

print sublist([2, 3], [1, 2, 3, 4, 5])
print sublist([1, 3], [1, 2, 3, 4, 5])
print sublist([1, 2, 3], [1, 2, 1, 2, 3, 4])

我们需要知道子列表的长度,这就是n的用途。

然后any()将在迭代中的第一个匹配后停止。 any()中的部分是generator,我们将子列表(list1)与list2中的每个子列表进行比较,从开始到结束。

i的范围从0到第二个列表的长度,但是你减去第一个列表的长度然后加1,所以你不要超过索引的末尾。< / p>