Ubuntu-18.04,Python-2.7.15
我想将150个零值的列表初始化为FIFO堆栈,然后每秒更新一次堆栈。
panel_width = 150
rx_values = [0] * panel_width
for i in range(0, panel_width):
rx_values[i] = 0
def refresh():
global rx_values
# update the stack
rx_values.remove(0)
rx_values[panel_width -1] = rx_bps
# more stuff
return
refresh() # every second
产生:
Traceback (most recent call last):
File "./wxpython/bandwidth/bandwidth.1804.2.py", line 64, in rx_refresh
rx_values[panel_width -1] = rx_bps
IndexError: list assignment index out of range
我在做什么错了?
答案 0 :(得分:0)
您创建一个包含150个项目的列表。这意味着项目索引从0到149。
然后,您删除列表的第一个元素:
rx_values.remove(0)
因此,rx_values
的长度减少了1:
> len(rx_values)
148
但是您尝试访问索引149处的元素:
rx_values[panel_width -1] = rx_bps
您需要在列表末尾添加新值:
rx_values.append(rx_bps)
答案 1 :(得分:0)
您的错误是在删除列表的元素时引起的,该列表会更改大小。我猜您想做的是保持FIFO队列的长度,如果删除第一个元素,则必须在末尾添加一个新元素。
除了分配最后一个元素,您还可以附加它。
panel_width = 150
rx_values = [0] * panel_width
def refresh():
global rx_values
# update the stack
rx_values.pop(0)
rx_values.append(rx_bps)
# more stuff
return
refresh() # every second
我还使用了pop而不是remove,因为pop返回了您要删除的值,对于FIFO队列,获取该值可能很有用。