2017-07-31 172 views
3

COMポートデータをPythonでリアルタイムにプロットするには、固定長の配列を作成する必要があります。新しい値を受け取った場合は最後のインデックスに保持し、配列が満たされたら次の更新時に1番目のインデックスに値をダンプします。つまり、最後のインデックスに最新の値を保持し、最初のインデックスで値を空にします(長さを固定します)。Pythonで長さを固定したまま配列を作成する方法はありますか?

+1

アレイの代わりにスタックが必要なような音がします。スタックの実装について学んでください(http://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementingaStackinPython.html) –

答えて

5

説明した内容は、固定長のダブルエンドキューです。

あなたはPythonの組み込みの両端キューを使用することができます。

from collections import deque 

d = deque(maxlen=2) 

for i in range(10): 
    d.append(i) 
    print(d) 

# deque([0], maxlen=2) 
# deque([0, 1], maxlen=2) 
# deque([1, 2], maxlen=2) 
# deque([2, 3], maxlen=2) 
# deque([3, 4], maxlen=2) 
# deque([4, 5], maxlen=2) 
# deque([5, 6], maxlen=2) 
# deque([6, 7], maxlen=2) 
# deque([7, 8], maxlen=2) 
# deque([8, 9], maxlen=2) 

あなたはまた、代わりにappendappendleftを使用することがあります。

また
for i in range(10): 
    d.appendleft(i) 
    print(d) 

# deque([0], maxlen=2) 
# deque([1, 0], maxlen=2) 
# deque([2, 1], maxlen=2) 
# deque([3, 2], maxlen=2) 
# deque([4, 3], maxlen=2) 
# deque([5, 4], maxlen=2) 
# deque([6, 5], maxlen=2) 
# deque([7, 6], maxlen=2) 
# deque([8, 7], maxlen=2) 
# deque([9, 8], maxlen=2) 


、あなたはそれ以外の方法することができます周りにしたい場合リストを継承してappendを実装してください。わずかに異なる結果に注意してください。

class MyList(list): 
    def __init__(self, max_len, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.max_len = max_len 

    def append(self, obj): 
     if len(self) < self.max_len: 
      super().append(obj) 
     else: 
      self.insert(0, obj) # inserting to the left 
      self.pop()   # deleting the last element on the right 

li = MyList(2) 

for i in range(10): 
    li.append(i) 
    print(li) 

# [0] 
# [0, 1] 
# [2, 0] 
# [3, 2] 
# [4, 3] 
# [5, 4] 
# [6, 5] 
# [7, 6] 
# [8, 7] 
# [9, 8] 
+1

彼は最初に削除したいと最後に追加して私が彼の質問から理解しているものです。 'stack.pop(0) '>' stack.append(6) 'は' [4,5,6] 'を返します。 –

関連する問題