在另一个列表中列出,但第一个列表的元素不需要在第二个列表中依次出现

List in another list, but the elements of the first list don‘t need to occure one after another in the second list

我有 2 个不同的列表要比较。
关于第一个列表元素的排序,我想知道第一个列表的所有元素是否都出现在第二个列表中,但是元素不需要在第二个列表中直接一个接一个地出现。
例如:
list1 = [3, 11, 17]
list2= [54, 3, 23, 17, 11, 50, 17]
对于这两个列表,函数应该 return True 因为 list1 的每个元素都以 list1 的顺序出现在

list2 = [54, 3, 23, 17, 11, 50, 17]
中。 每个列表的元素顺序不应更改,列表可以具有相同值的元素。

我们可以通过使用列表中的错误处理和 index 方法来做到这一点。让我们定义以下函数:

def compare_lists(list1, list2):
    start = 0
    for y in list1:
        try:
            start = list2.index(y, start) + 1
        except ValueError:
            return False
    else:
        return True

对于 list1 的每个元素,我们会查看 list2 在找到最后一个元素后的第一次出现。如果找到,我们将它的索引保存在一个变量start中,并从start + 1索引开始继续寻找list2中的下一个元素。

如果未找到该元素,index 方法将抛出一个 ValueError,我们将其捕获并用于 return False。如果没有抛出错误,那么列表通过了测试,我们 return True.

如果您还有任何问题,请告诉我们。