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

2024-04-19 04:38:22 发布

您现在位置: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  

我做错什么了


Tags: in列表for堆栈ubuntudefrangerx
2条回答

创建一个包含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)

您的错误是由于删除列表中的某个元素时,列表的大小会发生变化。我想您要做的是保持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队列,获取该值可能会很有用

相关问题 更多 >