2012-10-11 29 views
0

我有一个不同长度的列表,我想持续更新一些新的数据。所以基本上我想添加一个新的数据点并删除设置范围内的任何数据。我现在一直在玩这个,并且没有任何可以告诉的地方。我试图使用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) 

理想情况下n在for循环中的任何给定时间只会包含最后10个数据点。我相信,这是基本的,我只是不理解,如果你们都可以帮助我,我会非常感激。谢谢。

编辑:列表中的示例中,n

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

“N只会有最后的10个数据点” ......你到底在去年是什么意思?最新的插入方面? –

+0

你能给我们一个列表的例子,以及你想达到的目标。 – root

+0

@KaustubhKarkare它最多可以包含10个最近的迭代(在你点击10之前减少),然后保留10个最新迭代数字的列表。最后n会是[90,91,... 99]。 – deadstump

回答

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 
+0

'n [:] = n [1:]'可以被'n.pop(0)'替代。 –

+0

什么是'n [:]'符号?为什么不'n = n [1:]'? – Colleen

+1

http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python/1208792#1208792 –

4

为什么不pop()列表每次追加的东西的时候,如果len>10?如果我正确理解这个问题。

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

这与Kaustubh Karkare的回答(n [:] = n [1:])一样有效,但输出显示了弹出的数字(在列表外部,我打印'n'以便我可以看到它) 。这是正常的吗? – deadstump

+0

代码请!不确定你的意思 - 例如循环之外可以在之前或之后。 – Colleen

+0

如果我在'if'条件后用'print n'来代码,最后一个输出看起来像这个'88' \ n'[89,90,... 99]'。 '88'是弹出的值,列表是'n'。我想知道是否显示弹出的值是正常的行为。谢谢。 – deadstump

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) 

这应该永远到底

0

使用deque快速追加和持久性有机污染物的打印L: 和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