python中只能删除列表最后一个元素的是_python3中,为什么用for循环和del语句删除列表所有元素,但最终总会留下列表中最后两个元素呢?...

l = ['1', '2', '3', '4', '5']

for num in l:

print('num的地址: ', id(num))

print('删除l[0]元素'); del l[0]

for i in range(len(l)):

print('第%s个元素的地址' % i, id(l[i]))

print('l中还剩的元素', l)

print('\n\n')

题主可以试试运行上面的这段代码.

在我的电脑上, l中各元素在电脑中的地址是:

2138178117960 -> '1'

2138181612520 -> '2'

2138178949616 -> '3'

2138177877080 -> '4'

2138181612576 -> '5'

运行结果如下:

num的地址: 2138178117960

删除l[0]元素

第 0 个元素的地址 2138181612520

第 1 个元素的地址 2138178949616

第 2 个元素的地址 2138177877080

第 3 个元素的地址 2138181612576

l中还剩的元素 ['2', '3', '4', '5']

num的地址: 2138178949616

删除l[0]元素

第 0 个元素的地址 2138178949616

第 1 个元素的地址 2138177877080

第 2 个元素的地址 2138181612576

l中还剩的元素 ['3', '4', '5']

num的地址: 2138181612576

删除l[0]元素

第 0 个元素的地址 2138177877080

第 1 个元素的地址 2138181612576

l中还剩的元素 ['4', '5']

为什么循环只执行了 3 次?

其实要想知道这个问题, 我们需要知道for循环是怎么实现其功能的.

python3中的for循环实现需要借助迭代器.(感谢评论区@黄裳提醒,我没有试着分析过在python2中的执行情况,写出了有歧义的句子,不好意思。)

感兴趣的同学可以尝试我上面的方法或者其他方法分析一下题主代码在python2中的执行情况。

题主的代码实际上可以用以下几行代码代替:

l = ['1', '2', '3', '4', '5']

temp = iter(l)

num = next(temp) # 此时 num=1

del l[0] # 删除了 '1'

num = next(temp) # 此时 num=3

del l[0] # 删除了 '2'

num = next(temp) # 此时 num=5

del l[0] # 删除了 '3'

num = next(temp) # 触发 StopInteration 异常, 循环中止, 跳出循环

print(l) # ['4', '5']

我看了下题主的信息, 鉴于题主可能是一个资深程序员, 这段代码就不做过多的解释了, 如果有什么问题, 欢迎指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值