gpt4 book ai didi

python - 从列表中查找有序子序列(不一定是连续的)

转载 作者:行者123 更新时间:2023-11-28 20:16:42 32 4
gpt4 key购买 nike

我遇到了一个问题。我有一个列表,例如[A、B、C、D、E]。列表的大小可能会有所不同。我必须检查是否有一个子序列,例如[A,C,E] 出现在主列表中。子序列的大小也可能不同。

这里的问题是这里的子序列不需要是连续的。只是发生的顺序很重要。

一些例子:

seq = [A,B,C,D,E]

subseq = [A,C,E]
>>>sub-sequence present in sequence

subseq = [B,D,E]
>>> sub-sequence present in sequence

subseq = [A,E]
>>> sub-sequence present in sequence

subseq = [C,B]
>>> sub-sequence not present in sequence

subseq = [B,A,E]
>>> sub-sequence not present in sequence

最佳答案

你可以使用 iter生成一个迭代器,其消费强制执行每个成员检查的顺序。

def subcheck(li, sub_li):
it = iter(li)
return all(el in it for el in sub_li)

演示

In[95]: subcheck([1, 6, 3, 9, 4, 2], [1, 9, 3])
Out[95]: False

In[96]: subcheck([1, 6, 3, 9, 4, 2], [1, 3, 9])
Out[96]: True

这种方法之所以有效,是因为列表的 in 关键字是作为序列迭代 (the docs) 实现的:

For container types such as list, tuple, set, frozenset, dict, or collections.deque, the expression x in y is equivalent to any(x is e or x == e for e in y).

关于python - 从列表中查找有序子序列(不一定是连续的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003901/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com