Python列表嵌套索引删除疑问:为何删除元素16而非4?
理解嵌套索引的
del语句执行逻辑 咱们一步步拆解你的代码,就能明白为什么会出现这个和预期不符的结果:
初始列表生成
列表推导式list = [x * x for x in range(5)]会生成列表:[0, 1, 4, 9, 16],这部分你已经分析得很准确。关键语句
del lst[lst[2]]的执行顺序
Python在处理这种嵌套索引的表达式时,会优先计算最内层的表达式,也就是先解析lst[2]:- 当前
lst还是初始的[0,1,4,9,16],索引2对应的元素是4 - 所以
del lst[lst[2]]就等价于del lst[4] - 列表索引4对应的元素是
16,因此最终被删除的是16,而非你预期的索引2对应的元素4。
- 当前
为什么
del lst[2]能得到预期结果
当你改成del lst[2]时,直接指定了要删除的是列表的索引位置2,对应的元素正好是4,这就和你想要的结果一致了。
本质上是你混淆了「索引的数值」和「索引对应的元素值」:原语句里的lst[2]是取元素的值作为新的索引,而不是直接用2作为索引位置。
内容的提问来源于stack exchange,提问作者silverdagger
相关产品推荐
相关产品推荐

