python - 如何检查列表中是否存在子序列?

标签 python list python-itertools

<分区>

在 python 中,可以使用 is 关键字来检查包含,例如

>>> 3 in [1,2,3,4,5]
True

但是如果它检查单个整数列表是否在引用列表 [1,2,3,4,5] 内,则不会产生相同的输出:

>>> [3] in [1,2,3,4,5]
False

此外,无法通过以下方式检查引用列表中的子序列:

>>> [3,4,5] in [1,2,3,4,5]
False

有没有一种方法可以让函数检查子序列,从而使以下返回 true?,例如函数调用 x_in_y():

>>> x_in_y([3,4,5], [1,2,3,4,5])
True
>>> x_in_y([3], [1,2,3,4,5])
True
>>> x_in_y(3, [1,2,3,4,5])
True
>>> x_in_y([2,3], [1,2,3,4,5])
True
>>> x_in_y([2,4], [1,2,3,4,5])
False
>>> x_in_y([1,5], [1,2,3,4,5])
False

也许来自 itertoolsoperator

(注意,输入列表可以是非唯一的)

最佳答案

x_in_y() 可以通过对原始列表进行切片并将切片与输入列表进行比较来实现:

def x_in_y(query, base):
    try:
        l = len(query)
    except TypeError:
        l = 1
        query = type(base)((query,))

    for i in range(len(base)):
        if base[i:i+l] == query:
            return True
    return False

如果您使用的是 Python2,请将 range 更改为 xrange

关于python - 如何检查列表中是否存在子序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33392219/

相关文章:

python - 如何将 numpy 元组数组乘以标量数组

python - 在 Python 进程之间共享一个大的(只读的)二进制字符串?

c++ - 如何在C++中获取排序后保留的列表元素的指针

python - 柜台 list

python - 为什么压缩函数和可迭代的结果不起作用?

python - Python itertools 计数器的当前值是多少

python - 替换 XML 文件中的 python 字符串

python - 如何在 while 循环中使用 raw_input()

list - 如何在OCaml中检查下一个 'head'为空?

python - 添加列表中每个子列表的所有第二项