Python通过比较last和secondtolast值来添加/减去计数器

2024-03-29 11:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过根据特定条件进行加减来计算列表中的项目数。你知道吗

更详细一点:我有一个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:list索引超出范围,这是有意义的,因为您可以获取空列表中倒数第二个项。但是我不知道如果没有这样的检查,我怎么能检查这个值是增加还是减少…感觉就像第二十二条军规。你知道吗

我也不知道什么是实现计数器的最佳方法。 如果您能告诉我如何处理这个问题,我将不胜感激。你知道吗

代码

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)

Tags: toadd消息messagelenvaluedefmsg
1条回答
网友
1楼 · 发布于 2024-03-29 11:41:45

在引用前,只需检查是否有下一个元素:

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

相关问题 更多 >