从列表中删除不需要的数据

时间:2012-10-11 18:49:18

标签: python list

我有一个不同长度的列表,我希望不断更新一些新数据。所以基本上我想添加一个新的数据点并删除一组范围内的任何数据。我现在已经玩了一段时间,并且没有得到我能说的任何地方。我试图用this帖子作为参考,但显然我不知道发生了什么。下面是一个代码片段,它是我尝试过的一个例子。

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 个答案:

答案 0 :(得分:4)

如果pop(),每次添加内容时,为什么不只是len>10列表?如果我正确理解这个问题。

for i in range(0,100):
    n.append(i)
    if len(n)>10:
       n.pop(0)

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

使用快速追加和弹出的deque: 从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