【发布时间】:2016-10-12 00:28:15
【问题描述】:
我有一个主列表和一个子列表,我想定位在主列表中找到的每个子列表的索引,在本示例中,我希望返回以下索引列表。
>>> main_list = [1,2,3,4,4,4,1,2,3,4,4,4]
>>> sub_list = [4,4,4]
>>> function(main_list, sub_list)
>>> [3,9]
理想情况下,该函数还应该忽略 sub_list 的片段,在这种情况下 [4,4] 将被忽略。另外,我希望元素都是个位数的整数。为清楚起见,这是第二个示例:
>>> main_list = [9,8,7,5,5,5,5,5,4,3,2,5,5,5,5,5,1,1,1,5,5,5,5,5]
>>> sub_list = [5,5,5,5,5]
>>> function(main_list, sub_list)
>>> [3,11,19]
【问题讨论】:
-
main_list = [4, 4, 4]和sub_list = [4, 4]会发生什么? -
您的用例是否总是包含单个数字元素?因为这样你就可以制作一个简单的基于正则表达式的解决方案。
-
@MosesKoledoye 我认为这会返回 [0, 1]
-
根据您的数据,您可能会从像 Boyer-Moore 或 Knuth-Morris-Pratt 这样的 string search algorithm 中获得一些好处,特别是如果
sub_list可能很长或有很多几乎匹配。 -
一个幼稚的解决方案
[i for i in range(len(main_list) - len(sub_list) + 1) if main_list[i:i+len(sub_list)] == sub_list]
标签: python list indexing indices sublist