📅  最后修改于: 2023-12-03 15:04:26.383000             🧑  作者: Mango
有时候我们会遇到对比两个列表是否相同的情况,但是这两个列表存在可能循环到达相同的情况,例如:
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 1, 2, 3]
从以上两个列表可以看到,它们元素去向不同,但是它们并不属于不同的列表。在Python中,我们可以使用以下方法来检查两个列表是否循环相同。
将第一个列表循环一遍,每次与第二个列表的切片进行比较,如果相同则返回True,否则返回False。
def is_circular(list1, list2):
if len(list1) != len(list2):
return False
for i in range(len(list1)):
if list1[i:] + list1[:i] == list2:
return True
return False
对于方法一,每次循环都需要对列表进行切片,然后再进行比较,可能会比较费时。这时候我们可以使用in关键字,每次将第一个列表向右移动一个单位,判断是否存在于第二个列表中。
def is_circular(list1, list2):
if len(list1) != len(list2):
return False
for i in range(len(list1)):
if all(list1[(i+j)%len(list1)]==list2[j] for j in range(len(list1))):
return True
return False
列表推导式中可以嵌套循环,我们可以使用zip函数将两个列表同时循环,并且使用列表推导式来判断它们是否循环相同。
def is_circular(list1, list2):
if len(list1) != len(list2):
return False
return any([all(x == y for x, y in zip(list1[i:] + list1[:i], list2)) for i in range(len(list1))])
以上三种方法都可以在Python中实现列表循环比较。方法一使用了切片和列表循环方式,方法二使用了in关键字和列表循环方式,方法三则使用了列表推导式和zip函数。该程序员朋友,你可以根据自己的需要,选择合适的方法使用哦!