python中的有序子集

时间:2018-09-24 07:17:02

标签: python list set

我知道以前已经回答过很多类似的问题,但是我的担忧与内置功能有关,而不是我自己的循环和索引逻辑。

在我的python应用程序中,我需要检查listA是否为listB的子集。我是在这样的集合的帮助下完成的

set(listA) < set(listB)

总体上它运行良好,但我还需要检查列表中对象的顺序。例如

x = ['a','b','c','d']
xx = ['a', 'c']
xxx = ['c' , 'a']

因此根据集合定义;

set(xx) < set(x)返回true,而set(xxx) < set(x)也返回true ...

但是我需要返回false for 2nd case的东西。

python中是否有任何内置功能,或者我需要实现自己的逻辑以获得所需的结果?

1 个答案:

答案 0 :(得分:2)

我认为此操作的一个更好的说法是子序列

您需要自己编写此代码,但是通过将两个列表放在一起可以很容易地做到这一点:

def is_subsequence(a, b):
    b_it = iter(b)
    try:
        for a_val in a:
            while next(b_it) != a_val:
                pass
    except StopIteration:
        return False
    else:
        return True

用作:

>>> is_subsequence(xx, x)
True
>>> is_subsequence(xxx, x)
False

编辑:搜索“子序列”会找到this great answer