簡體   English   中英

Python通過比較倒數第二個到倒數第二個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM