2017-04-07 36 views
0

我有两个列表a和b,b是a中的某个小子集。比较列表的一个子集,并返回它在列表中的位置

b = ['apple','banana','carrot'] 
a = list of length 100 which somewhere contains b at indices 12,13,14. 

我想在a中搜索b并返回索引12,13,14。

我目前的想法是做两个嵌套循环寻找模式,但我希望有一个更清洁/更简单的解决方案。

+0

是,基本的方法是2个嵌套循环。对于你的问题它运作良好。您也可以将您的列表视为字符串,并使用这些https://en.wikipedia.org/wiki/String_searching_algorithm(KMP通常非常流行)(其中一些算法可能要求输入实际上是字符串,并且因此不适用) – njzk2

回答

4

下面是一个简单的可能性:

b = ['a', 'b', 'c'] 
a = ['t', 'z', 'd', 'a', 'b', 'c', 't', 's', 'a', 'b'] 

[i for i in range(len(a)) if a[i:i+len(b)] == b] 

输出:[3]

返回列表b的第一个元素的索引列表a。请注意,如果ba内重复多次,此方法将返回a中重复b的两个索引。

+0

@ nfnneil'12,13,14'在这些是正确索引的情况下。使用这种方法你可以得到'3',从中你可以扣除索引将是'3,4,5'。 –

0
>>> a=[[1,2,3],[4,5,6],[7,8,9]]; 
    >>> b=[4,5,6]; 
    >>> if b in a: 
    print"found at:",a.index(b); 
enter code here 

found at: 1 

//从蟒壳

+0

这不是一个答案,因为OP有一个扁平的列表,而不是已经被方便地切断的列表。 – Jamey

相关问题