|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
a=[1,2,3,1,2,3,1,2,3]
b=8
while b>0:
if a.pop(b)==1:
print(b)
else:
b=b-1
我打的代码时想删除一个等于1的数,然后把1这个数的序列数打印下来,结果只显示了一个,还报错,我想问下前辈们是发生了什么
6
Traceback (most recent call last):
File "C:/Users/防守得分/Desktop/列表3.py", line 4, in <module>
if a.pop(b)==1:
IndexError: pop index out of range
一个调试的小思路
- a = [1, 2, 3, 1, 2, 3, 1, 2, 3]
- b = 8
- while b > 0:
- print(f"b={b} len(a) = {len(a)}") # 手动调试一下
- if a.pop(b) == 1:
- print(b)
- else:
- b = b-1
复制代码
看下结果
b=8 len(a) = 9
b=7 len(a) = 8
b=6 len(a) = 7
6
b=6 len(a) = 6 <--- 越界
Traceback (most recent call last):
File "e:/编程/python/chaojiying_Python/鱼C.py", line 46, in <module>
if a.pop(b) == 1:
IndexError: pop index out of range
发现越了,因为用pop()函数判断时,导致列表a的元素个数不断减小,最终越界报错
你是想在列表中删掉一个等于1的数,那么可以使用列表的方法index()配合pop()达到删除的效果
- test = [1, 2, 3, 1, 2, 3, 1, 2, 3]
- for i in test:
- if i == 1:
- index = test.index(i) # 获取该元素的小标
- print(f"删掉下标为{index}的元素{i}")
- test.pop(index) # 并不建议在迭代中删掉元素
- print(f"当前列表{test}")
复制代码删掉下标为0的元素1
删掉下标为2的元素1
删掉下标为4的元素1
当前列表[2, 3, 2, 3, 2, 3]
|
|