鱼C论坛

 找回密码
 立即注册
查看: 848|回复: 8

[已解决]pop()相关

[复制链接]
发表于 2020-5-20 07:43:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位好!看到第11课
遇到一个问题


>>> list1=[1,3,5,7,9]
>>> list1.pop(2)
5

>>> list1=[1,3,5,7,9]
>>> list1.pop(list1[1])
7

上面两个为什么结果会不同?list1[1]不就是5吗?

另外
>>> list1=[1,3,5,7,9]
>>> list1.pop(list1[2])
Traceback (most recent call last):
  File "<pyshell#160>", line 1, in <module>
    list1.pop(list1[2])
IndexError: pop index out of range
这又是为什么?
谢谢先!
最佳答案
2020-5-20 08:14:10
本帖最后由 Twilight6 于 2020-5-20 08:24 编辑

pop() 里面填的是位置参数哦,若没填参数默认弹除最后一个元素

所以你的代码:
  list1=[     1,    3,    5,    7,     9]
#对应位置参数:0  , 1 ,2  ,  3  ,  4

#所以 你 list1.pop(1)
# 是弹出 list1 的 第一个位置参数的元素

另一个代码:
     list1=  [1 , 3,  5,  7, 9]
# 对应位置参数 0 ,1, 2,3, 4 
list[1] = 3
# 所以:
list1.pop(list[1]) = list1.pop(3)  是移出第三个位置参数的元素 ,即是 7 

最后一个代码:
     list1=  [1 , 3, 5, 7, 9]
# 对应位置参数 0 ,1, 2,3, 4
因为 list1[2] = 5
list1.pop(list1[2]) = list1.pop(5)

超出列表最大索引值 即最大位置参数索引值为 4 而你想弹出 第 5 位 导致报错


如果帮助到你了,就给个最佳吧~



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 07:48:41 | 显示全部楼层
本帖最后由 heidern0612 于 2020-5-20 07:49 编辑

1、list1.pop(list1[1]),分解看:list1[1]是几?是3吧?list1.pop(3)是几?是7吧?


2、list1.pop(list1[2]),分解看:list1[2]是几?是5吧?list1.pop(5)是个啥?你列表索引只到4,所以报超过索引的错误了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-20 08:14:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-5-20 08:24 编辑

pop() 里面填的是位置参数哦,若没填参数默认弹除最后一个元素

所以你的代码:
  list1=[     1,    3,    5,    7,     9]
#对应位置参数:0  , 1 ,2  ,  3  ,  4

#所以 你 list1.pop(1)
# 是弹出 list1 的 第一个位置参数的元素

另一个代码:
     list1=  [1 , 3,  5,  7, 9]
# 对应位置参数 0 ,1, 2,3, 4 
list[1] = 3
# 所以:
list1.pop(list[1]) = list1.pop(3)  是移出第三个位置参数的元素 ,即是 7 

最后一个代码:
     list1=  [1 , 3, 5, 7, 9]
# 对应位置参数 0 ,1, 2,3, 4
因为 list1[2] = 5
list1.pop(list1[2]) = list1.pop(5)

超出列表最大索引值 即最大位置参数索引值为 4 而你想弹出 第 5 位 导致报错


如果帮助到你了,就给个最佳吧~



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 08:41:26 | 显示全部楼层
从0开始数起
list1.pop(2)的值等于5

list1[1] = 3   list1.pop(3)  最后结果等于7
后面自己解一下就明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 09:45:34 | 显示全部楼层
你把pop和remove搞混了

pop函数的参数是列表元素的下标值;remove的参数值列表元素值
pop是直接按照下标进行定点删除;remove是根据元素值,删除第一个出现的元素,remove删除的可能不是你想删除的对应元素,假如:[1,2,3,1,5,8],若想删除第二个1,不能用 remove(1),因为这样删除的是第一个1

pop的参数是元素下标值,若没写参数,则删除最后一个元素,若下标超出范围则报错。list1.pop(list1[1])其实就是list1.pop(7),而 list1 长度是5,下标 7 超范围了,所以报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 12:42:15 | 显示全部楼层
pop的参数是元素占的位置
remove的参数才是元素的名称
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 16:16:02 | 显示全部楼层
heidern0612 发表于 2020-5-20 07:48
1、list1.pop(list1[1]),分解看:list1[1]是几?是3吧?list1.pop(3)是几?是7吧?

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 16:16:45 | 显示全部楼层
Twilight6 发表于 2020-5-20 08:14
pop() 里面填的是位置参数哦,若没填参数默认弹除最后一个元素

所以你的代码:

谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 16:17:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 05:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表