码迷,mamicode.com
首页 > 编程语言 > 详细

python 列表 -- 容易犯的错误

时间:2020-06-05 19:38:16      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:append   直接   nbsp   span   删除   索引   remove   col   管理功能   

1。列表的赋值和切片:

  切片返回的是列表对象的浅复制, 与列表对象的直接赋值并不一样:

>>> a = [1,2,3]
>>> b=a
>>> b
[1, 2, 3]
>>> a.append(4)
>>> b
[1, 2, 3, 4]
>>> 
>>> a=[1,2,3]
>>> b=a[::]
>>> b
[1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3]
>>> 

2。列表的删除和插入

  remove 和insert是对列表任意位置的元素进行删除和添加,但是会有意想不到的结果

原因在于列表的自动内存管理功能,当列表中的元素插入和删除时,列表会自动进行重新建立索引,保证元素的间没有空隙

>>> x = [1,2,2,3,3,4,5,6,1,1,2,3]
>>> for i in x:
    i
    if i ==1:
        x.remove(i)
        x

        
1
[2, 2, 3, 3, 4, 5, 6, 1, 1, 2, 3]
2
3
3
4
5
6
1
[2, 2, 3, 3, 4, 5, 6, 1, 2, 3]
2
3
>>> 

最后的结果是没有把列表中的1元素删除

insert也是同样的结果

(遍历的时候,是按照索引遍历,索引由于删除和插入被自动改变,所以遍历也很会相应的发生改变)

如何解决这个问题!

可以使用从后往前的方式删除列表中的元素,应为插入和删除并不会影响最后一个元素的索引的

>>> x
[1, 2, 2, 3, 3, 4, 5, 6, 1, 1, 2, 3]
>>> for i in range(len(x)-1,-1,-1):
    i
    if x[i] ==1:
        del x[i]
        x

        
11
10
9
[1, 2, 2, 3, 3, 4, 5, 6, 1, 2, 3]
8
[1, 2, 2, 3, 3, 4, 5, 6, 2, 3]
7
6
5
4
3
2
1
0
[2, 2, 3, 3, 4, 5, 6, 2, 3]
>>> 

 

python 列表 -- 容易犯的错误

标签:append   直接   nbsp   span   删除   索引   remove   col   管理功能   

原文地址:https://www.cnblogs.com/vincent-sh/p/13051466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!