2016-09-16 4 views
1

Ich habe eine Liste:Digit Mustervergleich

a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7] 

Ich mag würde zählen, wie oft 2, 4 zusammen erscheinen

(2 at index i and 4 at index i+1). 

Wie kann ich das tun?

Antwort

0

Um dies zu tun, müssen Sie jedes Paar in Ihrer gegebenen Liste überprüfen, um festzustellen, ob das Paar 2 und 4 enthält. In Python können Sie Paare mithilfe der integrierten Funktion zip erstellen.

Um benachbarte Paare zu erzeugen, liefern wir die Liste a als erstes Argument zu zip und die gleichen Liste eine Position nach vorne:

list(zip(a, a[1:])) # a[1:] is [2, 4, 5, 8, 2, 4, 2, 4, 6, 7] 

Dies erzeugt Paaren der Form:

[(1, 2), (2, 4), (4, 5), (5, 8), (8, 2), (2, 4), ...] 

Nun, was wir tun können ist iterieren durch diese Paare (mit for), entpacken Sie sie zu Variablen (i und j) und testen Sie unseren Zustand (einer ist gleich 2 und der andere zu 4). Das sieht wie folgt aus:

[i == 2 and j == 4 for i, j in zip(a, a[1:])] 

Dies erzeugt eine Liste mit True/False Einträge für Paare, die Erfolg haben und nicht die Bedingung, die wir gesetzt:

[False, True, False, False, False, True, False, True, False, False] 

Hier ist, wo eine weitere integrierte Funktion ist praktisch, sum(). Sie können sum mit einer Liste von Werten versorgen und diese zu einem einzigen Wert summieren; zum Glück, in Python, True als 1 behandelt wird, so sum kann es leicht zusammenzufassen und ein Ergebnis finden, wenn wir die Liste liefern wir vorher erstellt:

sum(i == 2 and j == 4 for i,j in zip(a, a[1:])) 

Dadurch hilft uns das Endergebnis 3 zu erreichen. ergibt sich wieder 3

count = 0 
for i,j in zip(a, a[1:]): 
    if i == 2 and j == 4: 
     count += 1 
print(count) 

als die sum Lösung tut:

In einem prozeduralen Weg, dies kann übersetzt werden.

+0

Erstaunlich, das hat funktioniert! Danke Jim! – user6837684

0

Verbinden Sie die Liste in eine Zeichenfolge und suchen Sie nach '24'.

>>> a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7] 
>>> ''.join(map(str, a)).count('24') 
3