0

いくつかの新しいデータで継続的に更新したいさまざまな長さのリストがあります。したがって、基本的には、新しいデータポイントを追加し、設定された範囲外のデータを削除したいと思います。私はこれを少し遊んでいますが、私が知ることができる場所はどこにもありません。私はこの投稿を参考にしようとしていましたが、どうやら私は何が起こっているのか理解していません。以下は、私が試したことの例であるコードスニペットです。

for i in range(0,100):
    n.append(i)
    n = [x for x in n if not (x-n[-1]>10)]
    print len(n)

理想的には、nには、forループ中の任意の時点で最後の10個のデータポイントのみが含まれます。これは私が理解していない基本的なことだと確信しています。皆さんが私を助けてくれたら、本当にありがたいです。ありがとう。

編集:リストの例n

[0]
[0, 1]
...
[89, 90, 91, 92, 93, 94, 95, 96, 97, 99]
4

4 に答える 4

4

pop()何かを追加するたびにリストだけではないのはなぜlen>10ですか?私が質問を正しく理解しているなら。

for i in range(0,100):
    n.append(i)
    if len(n)>10:
       n.pop(0)
于 2012-10-11T18:56:33.277 に答える
4

nには、挿入された最新の10個のデータポイントのみが含まれている必要があると仮定すると、次のようになります。

for i in range(0,100):
    n.append(i)
    if len(n)>10: n[:] = n[1:]
    print len(n) # will never go above 10
于 2012-10-11T18:56:38.817 に答える
1

私が正しく理解しているなら、あなたはリスト「n」にいくつかの可変数の要素を保持したいと思うでしょう。その変数を「m」と呼びましょう。

for i in range(0,100):
    n.append(i)
    m = random.randint(1, 10)
    if len(n)>m:
        n = n[-m:]               # [-m:] defines the last m elements of n
    print len(n)

これは常に最後にmを出力する必要があります

于 2012-10-11T19:04:24.583 に答える
0

高速な追加とポップでdequeを使用します。Python2.7以降では、maxlenを設定できます。

from collections import deque

>>> d=deque([])
>>> for i in range(10):
...     d.append(i)
...     if len(d) > 3: d.popleft()
... 
0
1
2
3
4
5
6
>>> d
deque([7, 8, 9])

maxlenの使用:

>>> d = deque(range(5), maxlen=3)
>>> print d
deque([2, 3, 4], maxlen=3)
>>> print d.maxlen
3
于 2012-10-11T19:16:25.830 に答える