Python错误“列表分配索引超出范围”

时间:2019-04-17 06:03:37

标签: python

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  

我在做什么错了?

2 个答案:

答案 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队列,获取该值可能很有用。