我有一个不同长度的列表,我希望不断更新一些新数据。所以基本上我想添加一个新的数据点并删除一组范围内的任何数据。我现在已经玩了一段时间,并且没有得到我能说的任何地方。我试图用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]
答案 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