Python Addier / Subtrahier-Zähler durch Vergleichen zuletzt zweiten bis letzten Werte

stimmen
0

Ich versuche, die Anzahl der Elemente in einer Liste zu zählen, durch das Hinzufügen / Subtrahier in Abhängigkeit von bestimmten Bedingungen.

Für ein bisschen mehr Kontext: Ich habe Midi-Controller, der Midi-Daten ausgibt, wenn ein Knopf gedreht wird. Unabhängig davon, wo der Knopf ist, mag ich auf 0 zurückgesetzt begegnen, und wie es in eine Richtung dreht dann den Wert erhöhen und in der anderen Richtung verringern.

Jede MIDI-Nachricht gibt so etwas wie folgt aus:

control_change channel=0 control=16 value=5 time=0
control_change channel=0 control=16 value=6 time=0
control_change channel=0 control=16 value=7 time=0

So denke, ich kann ich überprüfen, ob die nächsten empfangenen Nachrichten entweder größer oder kleiner als die vorherige Nachricht.

Das Problem, das ich in laufen lasse, ist, dass ein Index wie:

second_to_last_message = messages[-2]

Automatisch erzeugt Indexerror: Listenindex, die sinnvoll ist außer Reichweite, weil Sie das zweite zu letztem Element in einer leeren Liste zu bekommen. Aber ich bin nicht sicher, wie ich überprüfen kann, ob der Wert zunimmt oder abnimmt ohne Prüfung so ... fühlt sich wie ein Catch-22.

Auch ich bin nicht sicher, was der beste Weg, um den Zähler zu implementieren. Ich würde für alle Ideen von Ihnen dankbar, wie man diesen Ansatz.

CODE

messages = []
for msg in inport:

   def add(msg):
       messages.append(msg)

   def subtract(msg):
       messages.remove(msg)

   last_message = msg
   second_to_last_message = messages[-2]

   if last_message.value > second_to_last_message.value:
       add(msg)
       print len(messages)


   elif last_message.value < second_to_last_message.value:
       subtract(msg)
       print len(messages)

AKTUALISIERT CODE

messages = []
def add(msg):
    messages.append(msg)

def subtract(msg):
    messages.remove(messages[-1])

for msg in inport:
    if len(messages) < 2:
        add(msg)
        print len(messages)

    else:
        last_message = msg
        second_to_last_message = messages[-2]

        if last_message.value > second_to_last_message.value:
            add(msg)
            print len(messages)

        elif last_message.value < second_to_last_message.value:
            subtract(msg)
            print len(messages)
Veröffentlicht am 27/11/2018 um 17:55
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Sie müssen sich einfach überprüfen , ob Sie haben ein Next-to-letzte Element , bevor Sie es verweisen:

if len(messages) < 2:    # Not enough messages accumulated: 
                         #   add this one without checking the value
   add(msg)
   print len(messages)

else:
   second_to_last_message = messages[-2]
   # Continue with the rest of your code
Beantwortet am 27/11/2018 um 18:00
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more