检查两个列表中是否有相同的元素,顺序相同,但在Python中有其他起点

检查两个列表中是否有相同的元素,顺序相同,但在Python中有其他起点,python,Python,我需要写一个函数,在这里我需要检查两个列表中是否有这样的元素 (['E', 'A', None, 'D', 'B', None, None, 'C'], ['B', None, None, 'C', 'E', 'A', None, 'D']) 具有相同的元素,顺序相同,但具有其他起点 因此,如果您在第二个列表中搜索'E',并以此为起点,您将得到: (['E', 'A', None, 'D', 'B', None, None, 'C'], ['E', 'A', None, 'D', 'B', N

我需要写一个函数,在这里我需要检查两个列表中是否有这样的元素

(['E', 'A', None, 'D', 'B', None, None, 'C'], ['B', None, None, 'C', 'E', 'A', None, 'D'])
具有相同的元素,顺序相同,但具有其他起点

因此,如果您在第二个列表中搜索
'E'
,并以此为起点,您将得到:

(['E', 'A', None, 'D', 'B', None, None, 'C'], ['E', 'A', None, 'D', 'B', None, None, 'C'])
这两者是相同的,因此它们必须返回
True

如果它们不相同,则需要返回
False

很抱歉重复,我不是以英语为母语的人,不知道如何表达它

你可以利用它轻松解决问题

注意可能有比这更有效的算法,但您没有要求最有效的算法

实施 替代实施 例子
这实际上取决于您使用的列表类型。例如,如果您知道至少有一个元素(例如
'A'
)在您拥有的任何列表中恰好出现一次,那么问题就会大大简化。如果是这种情况,您可以执行以下操作:

list1 = [your first list]
list2 = [your second list]

for i in range(len(list1)):
    if list1[i] == 'A':
        split1A, split1B = list1[i:], list1[:i]
        check1 = split1A + split1B

#Repeat for list2

if check1 == check2: return True
else: return False

实际上,答案的复杂性取决于列表的性质。

如果您能够可靠地将列表序列化为字符串,那么您可以使用廉价且快速的子字符串检查轻松地完成这项工作

最近有人问了一个问题,下面是从那里偷来的基本想法:

l1 = ['E', 'A', None, 'D', 'B', None, None, 'C']
l2 = ['B', None, None, 'C', 'E', 'A', None, 'D']

if len(l1) == len(l2) and set(l1) == set(l2):    
    sep = ' '  # choose something that won't be in the data
    str_2l1 = sep.join(repr(x) for x in l1 + l1)
    str_l2 = sep.join(repr(x) for x in l2)
    return str_l2 in str_2l1
else:
    return False

你好欢迎来到这个网站!你还有多远?你粘在上面的是什么?你能在你的答案中包含一些代码吗?另外,请检查并感谢你,manIt工作:)
>>> l = (['E', 'A', None, 'D', 'B', None, None, 'C'], ['B', None, None, 'C', 'E', 'A', None, 'D'])
>>> is_same(*l)
True
list1 = [your first list]
list2 = [your second list]

for i in range(len(list1)):
    if list1[i] == 'A':
        split1A, split1B = list1[i:], list1[:i]
        check1 = split1A + split1B

#Repeat for list2

if check1 == check2: return True
else: return False
l1 = ['E', 'A', None, 'D', 'B', None, None, 'C']
l2 = ['B', None, None, 'C', 'E', 'A', None, 'D']

if len(l1) == len(l2) and set(l1) == set(l2):    
    sep = ' '  # choose something that won't be in the data
    str_2l1 = sep.join(repr(x) for x in l1 + l1)
    str_l2 = sep.join(repr(x) for x in l2)
    return str_l2 in str_2l1
else:
    return False