2016-12-04 9 views
1

Guten Morgen, Ich habe eine numpy Array wie: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]finden die Anzahl der getrennten Paare in Array

und ich würde die Anzahl der getrennten Paare von 1.

drei (oder mehr finden mögen) in Folge 1s auch als Paar zählen, das heißt: in diesem Beispiel sollte die zurückgegebene Nummer 3.

Was ist die beste Technik, um dies zu erreichen sein?

Vielen Dank!

Antwort

0

Sie können es selbst leicht implementieren, finden Sie in meinem Code unten:

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) 

Komplexität dieser Methode ist O(n)

0

ich für so etwas gehen würde:

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) 

Es ist einfach hält zusammen True s und False s hinzufügen. Ich denke, einige Leute werden es hässlich finden, ich denke, es ist OK.

Es sollte jedoch beachtet werden, dass, wenn die Liste wirklich groß ist, ist dies nicht eine gute Wahl, da es die Liste der bools im Speicher erstellt. Es wäre leicht, das zu vermeiden.

1

Verwendung itertools.groupby,

k Halten der eindeutige Schlüssel 0/1 basierte Liste LST unten, halten die g entsprechen Gruppe Iterator für den eindeutigen Schlüssel 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

Verwendung itertools.groupby und sum

sum(1 for target, group_count in itertools.groupby(lst) 
    if target == 1 and len(list(group_count)) >= 2) 
Verwandte Themen