learnpy 2020-06-05
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] >>>