2015-06-14 31 views
0

我需要找到列表中不是特定子列表的一部分的元素的索引。正在搜索一個孤立的列表元素

下面是一個例子:

List = [0,0,0,1,1,1,1,0,0,0,1,0,0] 

我有一個函數來確定一個列表是一個大名單的一個子表,但我不知道如何使用,在這種情況下,由於隔離1可能在列表的開頭或結尾。總會有四個連續的1和一個孤立的1

輸入是一個連續四個1 s和一個單獨1的列表。所有其他元素是0

輸出應該是隔離元素的位置(索引),在本例中爲10

+5

能否請你解釋更多關於你的問題? 什麼是輸入? 預期產量是多少? –

+0

你的意思是你需要找出列表中被不同元素(不同值)包圍的元素嗎? –

+0

是的,但元素也可以在列表的開始或結尾,因此只有一個周圍的元素,例如[1,0,0 ... –

回答

0

你可以通過1length of list - 2,既包容性,並打印由0s包圍元素,for循環檢查之前,如果啓動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 

使用xrange在蟒蛇2.x的更好的內存使用情況

+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