[英]Python add/subtract counter by comparing last to second-to-last values
我试图根据某些条件通过添加/减去来计算列表中的项目数。
需要更多上下文:我有一个Midi控制器,只要转动旋钮,该控制器就输出Midi数据。 不管旋钮在哪里,我都想将计数器重置为0,并且当它在一个方向上旋转时,请增大该值,而在另一个方向上减小。
每个midi消息输出如下内容:
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:列表索引超出范围,这很有意义,因为您可以在空列表中获得倒数第二个项目。 但是我不确定如何在没有检查的情况下检查值是增加还是减少...感觉像是catch 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)
您只需要在引用它之前检查是否有倒数第二个元素:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.