2016-12-04 62 views
1

早安, 我有一個numpy的陣列,如: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]發現陣列分離對數

,我想找到分離對1

三的數量(或更多)連續的1數也可作爲對,即:在這個例子中,返回數量應爲3

什麼是實現這一目標的最好的技術?

非常感謝!

回答

0

您可以自己輕鬆地實現它,請參閱我下面的代碼:

l = [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0] 
# Create flag to skip all elements that have >2 1 in sequence 
added = False 
pairs_counter = 0 
for i in range(1, len(l)): 
    rem = l[i - 1] 
    if l[i] == 1 and rem == 1 and not added: 
     added = True 
     pairs_counter +=1 
    if l[i] == 0: 
     added = False 
print (pairs_counter) 

這種方法的複雜性是O(n)

0

我會去這樣的事情:

a = [0 1 1 0 1 1 1 0 0 1 0 1 1 0] 
sum([ 
    a[i-2] == a[i-1] == 1 and a[i] == 0 
    for i in xrange(2,len(a)) 
]) + (len(a) > 2 and a[-1] == a[-2] == 1) 

它只是不斷增加True S和False小號一起。我想有些人會覺得它很醜,我認爲它是可以的。

應該指出雖然,如果名單真的是很大,這是不是一個好的選擇,因爲它在內存中創建布爾變量的列表。這很容易避免。

1

使用itertools.groupby

k持有下面的唯一密鑰0/1基於列表LST,g持有的唯一鍵k

import itertools 
target = 1 
lst = [0,1,1,0,1,1,1,0,0,1,0,1,1,0] 
pair_count = 0 

for k,g in itertools.groupby(lst): 
    if k==target and len(list(g))>1: # match target and more than 1 count as pair 
     pair_count += 1 
# pair_count = 3 
0

使用itertools.groupby與和

的對應組迭代
sum(1 for target, group_count in itertools.groupby(lst) 
    if target == 1 and len(list(group_count)) >= 2)