如何测试列表是否包含另一个列表(即,它是一个连续的子序列).假设有一个名为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]
这是"字符串包含子字符串"问题到(更多)任意类型的概括.
给定一个序列(例如列表或元组),确定另一个序列是否在其中的最佳方法是什么?作为奖励,它应该返回子序列开始的元素的索引:
用法示例(序列中的序列):
>>> seq_in_seq([5,6],  [4,'a',3,5,6])
3
>>> seq_in_seq([5,7],  [4,'a',3,5,6])
-1 # or None, or whatever
到目前为止,我只是依靠蛮力,它似乎缓慢,丑陋,笨拙.
假设我有以下列表
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
我想找到某个长度的所有可能的子列表,其中它们不包含一个特定的数字并且不会丢失数字的顺序.
例如,所有可能的长度为6而没有12的子列表是:
[1,2,3,4,5,6]
[2,3,4,5,6,7]
[3,4,5,6,7,8]
[4,5,6,7,8,9]
[5,6,7,8,9,10]
[6,7,8,9,10,11]
[13,14,15,16,17,18]
问题是,我想在一个非常大的列表中进行,我想要最快捷的方式.
用我的方法更新:
oldlist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
newlist = []
length = 6
exclude = 12
for i in oldlist:
   if length+i>len(oldlist):
       break
   else:
       mylist.append(oldlist[i:(i+length)]
for i in newlist:
    if exclude in i:
       newlist.remove(i)
我知道这不是最好的方法,这就是为什么我需要一个更好的方法.
我想检查一个子列表是否存在于另一个(更大的)列表中,元素的顺序完全相同。我也希望它允许通配符。例如,我有以下列表:
>>> my_lists
[[0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 2, 2],
[1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 0, 2, 1, 2, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 0],
[0, 0, …在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
也许来自itertools或的东西operator?
(注意,输入列表可以是非唯一的)
我知道如何查找一个列表是否是另一个列表的子集。但是我想知道如何确定一个列表是另一个列表的有序子集。通过有序的子集,我的意思是两个列表中的元素都以相同的顺序
例如,如果我有以下列表
A = [1,2,3]
B = [1,2]
C = [2,1]
这里B是A的有序子集,但C不是(尽管A具有C的所有元素)
我有一个数字列表
l = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 2, 1, 1, 2, 0, 0, 0, 0]
[0, 0, 2, 1, 1, 2, 2, …我的问题与典型的问题不同。假设我们有,
X = ['123', '456', '789']
并且,我们想要查找 X 中是否有另一个列表具有完全相同的顺序。例如,
A = ['123', '456']
# should return True since A in X with same order
B = ['456', '123']
# should return False since elements in B are not in same order with X
C = ['123', '789']
# should return False since elements in C are not adjacent in X
谁能给我任何想法吗?
为什么下面的代码在 Python中返回FALSE?不应该是TRUE,因为 b 已经包含“T”。
a = ["T"]
b = ["H", "T"]
a in b
False