我知道以前已经回答过很多类似的问题,但是我的担忧与内置功能有关,而不是我自己的循环和索引逻辑。
在我的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中是否有任何内置功能,或者我需要实现自己的逻辑以获得所需的结果?
答案 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。