如何有效地检查列表的前半部分是否与另一部分相等?

pla*_*etp 2 python equality list python-3.x

我需要检查Python列表是否包含两个相等的一半.例如,此列表可以:

[6, 2, 0, 2, 3, 2, 6, 2, 0, 2, 3, 2]
Run Code Online (Sandbox Code Playgroud)

而这不是

[6, 2, 0, 2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

我试过这个检查:len(lst) % 2 == 0 and lst[:len(lst)//2] == lst[len(lst)//2:]但是对于更大的列表来说似乎太慢了.还有其他方法吗?

khe*_*ood 8

可以在不创建两个子列表的情况下进行检查.真正的大型列表可能会更快.

n = len(lst)//2
all(lst[i]==lst[i+n] for i in range(n))
Run Code Online (Sandbox Code Playgroud)

如果您还要检查列表的长度是否均匀,您还可以添加

len(lst)%2==0
Run Code Online (Sandbox Code Playgroud)

作为一个条件.

  • @MartijnPieters奇数长度的列表**从不**由两个相等的一半组成. (2认同)