我需要在列表中找到不属于特定子列表的元素的索引。
以下是一个例子:
List = [0,0,0,1,1,1,1,0,0,0,1,0,0]
我有一个函数来确定列表是否是更大列表的子列表,但我不知道如何在此上下文中使用它,因为隔离的1
可能在开头或在列表的结尾。总会有四个连续的1
和一个孤立的1
。
输入是一个包含四个连续1
和一个孤立1
的列表。所有其他元素都是0
。
输出应该是隔离元素的位置(索引),在本例中为10
。
答案 0 :(得分:2)
这非常适合itertools.groupby
:
from operator import itemgetter
from itertools import groupby
def find_isolated_item(seq, search):
for k, g in groupby(enumerate(seq), key=itemgetter(1)):
index, item = next(g)
if item == search and sum(1 for _ in g) == 0:
return index
...
>>> find_isolated_item([0,0,0,1,1,1,1,0,0,0,1,0,0], 1)
10
>>> find_isolated_item([1,0,0,1,1,1,1,0,0,0,0,0,0], 1)
0
答案 1 :(得分:0)
您可以在1
和length of list - 2
之间循环遍历每个元素,并打印0s
所包围的元素,并在for循环检查之前是否为start elemnt,是1
,第二个元素是0
,还是结束元素是1
还是倒数第二个元素是0
。
代码就像 -
if lst[0] == 1 and lst[1] == 0:
return 0
if lst[len(lst)-1] == 1 and lst[len(lst)-2] == 0:
return 1
for i in range(1,len(lst)-1):
if lst[i] == 1 and lst[i-1] == 0 and lst[i+1] == 0:
return i
在python 2.x中使用xrange
以获得更好的内存使用