【问题标题】:How to check if the first half of a list is equal to the other efficiently?如何有效地检查列表的前半部分是否等于另一半?
【发布时间】:2017-11-03 13:20:22
【问题描述】:

我需要检查 Python 列表是否由相等的两半组成。例如,此列表会:

[6, 2, 0, 2, 3, 2, 6, 2, 0, 2, 3, 2]

这不是

[6, 2, 0, 2, 4, 6]

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

【问题讨论】:

  • 解决方案是在不复制的情况下进行切片,但 python 似乎不是这样做的内置或标准方式:stackoverflow.com/questions/3485475/…
  • 你能保证输入列表的长度总是偶数吗?
  • @PM 2Ring:我使用了一个额外的检查 len(lst) % 2 == 0

标签: python list python-3.x equality


【解决方案1】:

可以在不创建两个子列表的情况下进行检查。对于非常大的列表,它可能会更快。

n = len(lst)//2
all(lst[i]==lst[i+n] for i in range(n))

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

len(lst)%2==0

作为条件。

【讨论】:

  • 呸,指数。好多了。
  • 检测到错误 - 不适用于奇数长度的列表
  • @Leon:怎么会这样? // floors 所以我看不出n + n 怎么会比n 大。并且 OP 从来没有定义什么是正确的 res
  • @MartijnPieters 奇数长度列表从不由相等的两半组成。
  • @Leon:当然,不同的结果,但是关于处理奇数长度的问题没有限制。只需先添加 len(lst) % 2 测试以返回 False 或引发异常。
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多