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)

理想情况下,在 for 循环期间的任何给定时间,n 都只会包含最后 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

使用带有快速追加和弹出的双端队列:从 python 2.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 回答