【发布时间】:2011-04-20 07:54:36
【问题描述】:
如何测试一个列表是否包含另一个列表(即它是一个连续的子序列)。假设有一个名为 contains 的函数:
contains([1,2], [-1, 0, 1, 2]) # Returns [2, 3] (contains returns [start, end])
contains([1,3], [-1, 0, 1, 2]) # Returns False
contains([1, 2], [[1, 2], 3]) # Returns False
contains([[1, 2]], [[1, 2], 3]) # Returns [0, 0]
编辑:
contains([2, 1], [-1, 0, 1, 2]) # Returns False
contains([-1, 1, 2], [-1, 0, 1, 2]) # Returns False
contains([0, 1, 2], [-1, 0, 1, 2]) # Returns [1, 3]
【问题讨论】:
-
不管怎样,返回
[start, end+1]更符合 Python 风格,因为它看起来像一个切片 --(end+1)-start给出了找到的长度。 -
这看起来是个糟糕的设计——有时函数返回一个布尔值,有时它返回一个列表。这使得它很难使用,因为您必须先检查返回类型,然后才能对结果执行任何操作。恕我直言,一个名为“包含”的函数应该只返回 True 或 False。
-
很遗憾,列表没有内置所需的功能,但字符串有 (
str.find)。 -
为什么这会出于某种原因返回一个列表而不是一个元组!?
标签: python