📌  相关文章
📜  Python - 一个列表在另一个列表中的第一次出现(1)

📅  最后修改于: 2023-12-03 15:33:56.330000             🧑  作者: Mango

Python - 一个列表在另一个列表中的第一次出现

在Python编程中,有时需要检查一个list是否在另一个list中出现,并找到第一次出现的位置。这可以使用Python内置的函数和方法来完成。

使用in操作符

最简单的方法是使用Python的in操作符来检查一个list是否在另一个list中出现。如果要找到第一次出现的位置,可以使用index()方法来查找位置。

list1 = [1, 2, 3, 4, 5]
list2 = [3, 4]

if all(x in list1 for x in list2):
    print("list2 is in list1")
    index = list1.index(list2[0])
    print(f"The first occurrence of list2 is at index {index}")
else:
    print("list2 is not in list1")

输出结果:

list2 is in list1
The first occurrence of list2 is at index 2

在这个例子中,我们首先使用all()方法来检查list2中的所有元素是否都存在于list1中。如果存在,我们就使用index()方法来找到list2中的第一个元素在list1中的位置。

需要注意的是,如果list2不是list1的子集,则会抛出ValueError异常。因此,建议在使用index()方法之前先使用in操作符来检查list2是否在list1中。

使用循环

另一种方法是使用循环遍历list1中的每个元素,并检查list2是否为list1中从当前位置开始的连续子序列。如果是,则返回当前位置作为结果。

list1 = [1, 2, 3, 4, 5]
list2 = [3, 4]

for i in range(len(list1) - len(list2) + 1):
    if list1[i:i+len(list2)] == list2:
        print("list2 is in list1")
        print(f"The first occurrence of list2 is at index {i}")
        break
else:
    print("list2 is not in list1")

输出结果:

list2 is in list1
The first occurrence of list2 is at index 2

在这里,我们使用range()函数生成一个从0到len(list1)-len(list2)+1的范围,并使用循环遍历每个位置i。然后,我们使用切片操作list1[i:i+len(list2)]来获取从i开始的长度为len(list2)的子列表,并检查它是否等于list2。如果它匹配,我们就找到了第一次出现的位置,计算其为i,并使用break跳出循环。如果我们到达了循环的结尾而没有找到符合要求的结果,则说明list2不在list1中。

总结

以上是Python中查找一个列表是否在另一个列表中第一次出现的两种方法,它们各有优缺点。在in操作符方法中,内置函数all()可以简化代码,但是如果列表很长,它的性能可能会很慢。在使用循环的方法中,需要遍历整个列表,但是它不需要检查所有元素,如果列表很长,它的性能可能更好。因此,您可以根据您的具体需求选择适合您的方法。