我有兩個列表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。
我目前的想法是做兩個嵌套循環尋找模式,但我希望有一個更清潔/更簡單的解決方案。
我有兩個列表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。
我目前的想法是做兩個嵌套循環尋找模式,但我希望有一個更清潔/更簡單的解決方案。
下面是一個簡單的可能性:
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
。請注意,如果b
在a
內重複多次,此方法將返回a
中重複b
的兩個索引。
@ nfnneil'12,13,14'在這些是正確索引的情況下。使用這種方法你可以得到'3',從中你可以扣除索引將是'3,4,5'。 –
>>> 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
//從蟒殼
這不是一個答案,因爲OP有一個扁平的列表,而不是已經被方便地切斷的列表。 – Jamey
是,基本的方法是2個嵌套循環。對於你的問題它運作良好。您也可以將您的列表視爲字符串,並使用這些https://en.wikipedia.org/wiki/String_searching_algorithm(KMP通常非常流行)(其中一些算法可能要求輸入實際上是字符串,並且因此不適用) – njzk2