Python列表元素交换代码中为何使用pos1-1与pos2-1?
为什么交换列表元素的代码里要用
pos2-1? 核心原因:Python列表是0索引的
Python里的列表元素索引是从0开始计数的——第一个元素索引是0,第二个是1,第三个是2,以此类推。但我们日常习惯用1来数第一个元素,这就是矛盾点。
看代码里的变量:
pos1, pos2 = 1, 3
这里的1和3是按人类习惯写的「第1个元素」「第3个元素」,但函数swapPositions的参数pos1和pos2要求传入的是列表的索引值。所以必须把人类的1-based位置转换成Python的0-based索引,减1就是干这个的:
- 人类的第1个元素 → 索引0(1-1)
- 人类的第3个元素 → 索引2(3-1)
不减1会发生什么?
如果直接传pos1和pos2(也就是1和3)给函数,函数会去交换列表的索引1和索引3的元素:
- 原列表
[23, 65, 19, 90]里,索引1是65,索引3是90 - 交换后列表会变成
[23, 90, 19, 65],这和你原本想交换「第1个(23)和第3个(19)」的意图完全不符。
甚至如果你的位置编号超过了列表长度(比如pos2设成5),不减1直接传的话,还会抛出IndexError索引越界错误,因为列表根本没有索引5的元素。
内容的提问来源于stack exchange,提问作者Asra Hussain
相关产品推荐
相关产品推荐

