【问题标题】:Startswith for lists in python?从python中的列表开始?
【发布时间】:2014-05-28 07:32:29
【问题描述】:

python 中的列表是否有类似的开头?

我想知道列表 a 是否以列表 b 开头。喜欢

len(a) >= len(b) and a[:len(b)] == b ?

【问题讨论】:

  • 这有什么问题?没有太多需要优化的地方。
  • @Christian,对字符串做同样的事情也没有错,但是有一个 API
  • 我认为没有比这更简单的了。
  • @ElefEnt,我认为你也可以对字符串做同样的事情,几乎任何可迭代的
  • 您认为 API 中的方法是如何实现的?

标签: python list python-2.7


【解决方案1】:

你可以写a[:len(b)] == b

如果 len(b) > len(a),则不会引发错误。

【讨论】:

  • 你的意思是 len(b)
  • 在任何情况下都不会出现错误。切片超过列表长度不会失败。
  • 是的,但是要满足条件才能正常工作
  • 不,不应该。它适用于len(a) < len(b)len(a) == len(b)len(a) > len(b)。前者永远是false,但代码可以正常工作。
  • @Tim:False,而不是false。这是 Python,而不是 Java(或任何其他布尔常量以小写字母开头的语言。)
【解决方案2】:

对于大型列表,这将更有效:

from itertools import izip
...
result = all(x==y for (x, y) in izip(a, b))

对于小型列表,您的代码很好。长度检查可以省略,正如DavidK 所说,但不会有太大区别。

PS:不,没有内置函数来检查一个列表是否以另一个列表开头,但正如您已经知道的那样,自己编写这样一个函数是微不足道的。

【讨论】:

    【解决方案3】:

    它并没有比你所拥有的简单得多(甚至不需要检查长度)...... 有关在列表中查找子列表的更多扩展/优雅选项的概述,您可以查看对此的主要答案 发帖:elegant find sub-list in list

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2022-01-08
      • 2016-05-11
      • 2011-11-06
      相关资源
      最近更新 更多