Python拼接列表首尾元素时出现IndexError与SyntaxError的原因
两个错误的原因分析
1. IndexError: list index out of range 的原因
- 你的循环范围是
range(len(numlist)),x会从0一直遍历到len(numlist)-1 - 当x=0时,
len(numlist)-x的结果是len(numlist),但列表的索引从0开始,最大有效索引是len(numlist)-1,这时候访问numlist[len(numlist)]直接超出了列表的索引范围,触发越界错误 - 另外循环次数也不合理:要实现首尾对应拼接,只需要循环列表长度的一半次数(比如10个元素循环5次),不然不仅会重复拼接元素,还会再次触发越界问题
举个实际例子:如果numlist有10个元素,x=0时你要访问的第二个索引是10,但列表只有0-9的索引,直接报错;x=9时,len(numlist)-x=1,这时候拼接的是第9个和第1个元素,和x=1时拼接第1个和第9个的操作完全重复。
2. SyntaxError: name 'numlist' is used prior to global declaration 的原因
- Python里
global声明必须放在函数内所有使用该变量的代码之前,你在循环内部才加global numlist,但之前已经用了len(numlist)来确定循环范围,这就违反了语法规则,所以报错 - 而且这个声明完全没必要:如果numlist是全局变量,你只是读取它的内容(比如取元素、求长度),根本不需要加
global;只有当你要在函数内部修改全局变量的指向时,才需要用global声明,你这属于画蛇添足。
内容的提问来源于stack exchange,提问作者MijiGamin1
相关产品推荐
相关产品推荐

