python关于列表操作的几行代码思考

本文探讨了在Python中如何有效地删除长列表尾部的特定元素。作者通过三次尝试,分享了遇到的问题及解决方案,强调了在正向遍历列表时执行删除操作的潜在错误,并给出了简洁的C风格实现。
摘要由CSDN通过智能技术生成

python关于列表操作的几行代码思考

疑问:在学习python中我打算删除长列表中最后几个特定元素,于是写了几行代码发现都不不太好,存在一些问题。
问题:l = [‘a’,‘b’,‘c’,‘a’,‘b’,‘c’],删除最后一个‘a’的元素。这个问题也可以变成删除最后几个特定元素。

第一次尝试
l =  ['a','b','c','a','b','c']
times  = 1
for i in reversed(l):
    if times != 0 and i == 'a':
        l.remove(i)
        times -= 1
结果是:
['b', 'c', 'a', 'b', 'c']     

问题在于remove(‘a’)只删除列表中第一个‘a’,所以结果错了。

第二次尝试
l =  ['a','b','c','a','b','c']
times  = 1
l = reversed(l)
for k,item in enumerate(l):
    if times != 0 and item == 'a':
        l.remove('a')
        times -= 1
l = reversed(l)
结果是:
errors:
Instance of 'reversed' has no 'remove' member pylint(no-member) [20, 9]
The first reversed) argument is not a sequence pylint(bad-reversed-sequence) [22, 5]

这次想反转之后,删除,再反转回来。但是反转之后不支持删除操作,换成del也不行。
失败了。

第三次尝试
l =  ['a','b','c','a','b','c']
times  = 1
for i in reversed(range(len(l))):
    if times != 0 and l[i] == 'a':
        del l[i]
        times -= 1

最终还是用了很c风格的代码,但是也很简短。
直接倒过来遍历来操作。

顺便一说,正向遍历的时候执行删除操作很容易出错,因为列表变了,后面元素的索引会跟着变,很容易少删漏删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值