列表深浅拷贝 删除 反转 排序
拷贝
- copy 方法 可以拷贝一个列表
列表里面的列表,并不会跟着改变,也就是说,它是浅拷贝(影子拷贝),遇到引用类型时,只能复制一个地址而已
- 深拷贝的实现:
引用copy 模块 使用里面的 deepcopy 就可以完成深拷贝
from copy import *
l3=deepcopy(l1)
print(l1,l3)
l3[2][0]="被更改"
print(l1,l3)
- 使用 * 号,复制出来的列表,实际上也是一种浅拷贝
可以看到,他们的地址是一样的
删除
- remove(值)
找到第一个相等的元素,移除,返回None 如果没有找到符合条件的值,抛出异常 需要进行遍历
- pop(index)
利用索引,找元素,将找到的元素返回, 如果索引不正确,会抛出indexError 异常 index在尾部为O(1) 在首部为O(n)
- clear() 返回None
清除列表里面的所有元素,仅仅只是引用计数-1,并不确定会不会触发回收机制,这个方法和 直接将 长度 置1是一个效果,所以clear 效率还行
反转
- reverse() 返回值为None
l1=list(range(9))
l1.reverse() #反转
print(l1)
将列表反转, 就地修改,效率不高 使用负索引,倒着读,也可以实现同样的效果
- 使用负索引反转列表
l1=list(range(9))
l2=l1[::-1] #反转
print(l2)
排序
- sort(key=None,reverser=False) 返回值为None
对列表进行排序,默认为升序
当reverse=True 时,为降序
key 可以指定,以什么类型进行排序 不指定时,为int将列表种所有的元素,转换成指定类型,如果转换失败,就抛出异常,仅仅转换,但不影响元素本身
l1=[2,1,3,6,4,5,9,7,8]
l1.sort() #升序,以int 类型进行排序
print(l1)
l1=[2,1,3,6,4,5,9,7,8]
l1.sort(reverse=True)
print(l1)
l1=[2,1,3,6,4,5,9,7,8]
l1.append("8") #尝试转换成数字,进行排序
l1.sort(key=int)
print(l1)
l1=[2,1,3,6,4,5,9,7,8]
l1.append("a")
l1.sort(key=str) #使用ascii 码形式,进行排序
print(l1)
补充
- in
判断某个元素是否在列表中,没有就返回false 有即返回true
值 in 列表
print(type(1 in l1))
print(1 in l1)