早安, 我有一個numpy的陣列,如: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]
發現陣列分離對數
,我想找到分離對1
三的數量(或更多)連續的1數也可作爲對,即:在這個例子中,返回數量應爲3
什麼是實現這一目標的最好的技術?
非常感謝!
早安, 我有一個numpy的陣列,如: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]
發現陣列分離對數
,我想找到分離對1
三的數量(或更多)連續的1數也可作爲對,即:在這個例子中,返回數量應爲3
什麼是實現這一目標的最好的技術?
非常感謝!
您可以自己輕鬆地實現它,請參閱我下面的代碼:
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)
我會去這樣的事情:
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
小號一起。我想有些人會覺得它很醜,我認爲它是可以的。
應該指出雖然,如果名單真的是很大,這是不是一個好的選擇,因爲它在內存中創建布爾變量的列表。這很容易避免。
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
使用itertools.groupby與和
的對應組迭代sum(1 for target, group_count in itertools.groupby(lst)
if target == 1 and len(list(group_count)) >= 2)