删除列表中某些数据,如何用循环做到删准确

场景:给出一个列表li = [1,2,3,4,6,5,8,12], 如何剔除掉列表中的偶数?

第一种方法:找出要保留的元素,放到临时列表中,再将临时列表赋值给原来的列表。

优点:简单,不易错

缺点:多一个临时列表,代码量增多,占用内存空间

li = [1,2,3,4,6,5,8,12]
temp = []  # 临时列表

for i in li:
    if i % 2 != 0:
        temp.append(i)

li = temp
print(li)

结果为[1, 3, 5]

第二种方法:直接在列表中进行删除操作

for i in li[:]:
    # 注意要用li[:],若用li,则删除不准确
    if i % 2 == 0:
        li.remove(i)

print(li)

注意:要用li[:],若用li或者range(len(li)),然后进行判断+删除,会删不准确。

原因如下:列表的元素是有序的,每个元素都有下标

1.用li[:],下标和元素搭配是固定不变的

2.单纯用li或者for i in range(len(li)),虽然也是每个元素搭配一个下标,但当删除符合的偶数时,列表长度会发生变化,下标也跟着变化,是一个动态的过程。

我们可以看下

li = [2,1,9,10,4,5,6,8]

for i,j in enumerate(li[:]):
    print(f'({i},{j})')
    if j % 2 == 0:
        print('---删除开始---')
        print(i, j)
        li.remove(j)
        print('---删除结束---')

print(li)

结果为:

(0,2)
---删除开始---
0 2
---删除结束---
(1,1)
(2,9)
(3,10)
---删除开始---
3 10
---删除结束---
(4,4)
---删除开始---
4 4
---删除结束---
(5,5)
(6,6)
---删除开始---
6 6
---删除结束---
(7,8)
---删除开始---
7 8
---删除结束---
[1, 9, 5]
 

li = [2,1,9,10,4,5,6,8]

for i,j in enumerate(li):
    print(f'({i},{j})')
    if j % 2 == 0:
        print('---删除开始---')
        print(i, j)
        li.remove(j)
        print('---删除结束---')

print(li)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值