如何检查列表中是否存在子序列?
How to check subsequence exists in a list?
在 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
有没有一种方法可以让函数检查子序列,使得以下 returns 为真? 例如函数调用 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
也许来自 itertools
或 operator
?
(注意,输入列表可以是非唯一的)
也许是这样的:
def x_in_y(search_list, my_list):
return all([s in my_list for s in search_list])
假设 search_list
是一个列表。
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 中,可以使用 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
有没有一种方法可以让函数检查子序列,使得以下 returns 为真? 例如函数调用 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
也许来自 itertools
或 operator
?
(注意,输入列表可以是非唯一的)
也许是这样的:
def x_in_y(search_list, my_list):
return all([s in my_list for s in search_list])
假设 search_list
是一个列表。
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
。