Я пытаюсь подсчитать количество элементов в списке, добавляя / вычитая в зависимости от определенных условий.
Для большего контекста: у меня есть Midi-контроллер, который выводит Midi-данные при каждом повороте ручки.Независимо от того, где находится ручка, я хочу, чтобы счетчик сбрасывался на 0, и, когда он поворачивается в одном направлении, затем увеличивает значение и уменьшает в другом направлении.
Каждое миди-сообщение выдает что-то вроде этого:
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
Итак, я полагаю, я могу проверить, больше или меньше следующие полученные сообщения, чем предыдущее сообщение.
Проблема, с которой я сталкиваюсь, заключается в том, что такой индекс имеет вид:
second_to_last_message = messages[-2]
Автоматически создает IndexError: список индексов выходит за пределы допустимого диапазона, что имеет смысл, поскольку вы можете получить второй за последнимэлемент в пустом списке.Но я не уверен, как я могу проверить, увеличивается ли значение или уменьшается без такой проверки ... похоже на уловку-22.
Также я не уверен, как лучше реализовать счетчик.Буду признателен за любые идеи, как к этому подойти.
КОД
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)
ОБНОВЛЕННЫЙ КОД
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)