(一)列表查询
- index(value[start,stop])
O(n)的时间复杂度 - count(value)
返回列表中匹配value的次数
O(n)的时间复杂度 - 时间复杂度
index和count方法都是On
随着列表数据规模的增大,而效率下降 - 返回列表元素的个数
len(list)
(二)列表增加,插入元素
- append(object)
列表尾部追加元素,返回None
返回None就以为这没有新的列表产生,就地修改
时间复杂度On - insert(index,object)
在指定的索引INDEX处插入元素object
返回None就意味着没有新的列表产生,就地修改
时间复杂度是O(n)
索引能超上下界
超越上界,尾部追加
超越下界,头部追加 - extend
将可迭代对象的元素追加进来,返回None
就地修改 - (+) ->list
连接操作,将两个列表连接起来
产生新的列表,原列表不变
本质上调用的是——add_()方法 - (*)->
重复操作,将本列表元素重复n次,返回新的列表
(三)列表删除元素
-
remove(value) ->None
从左至右查找第一个匹配value的值,移除该元素,返回none
就地修改 -
pop([index]) ->item
不指定索引index,就从列表尾部弹出一个元素
指定索引index,就 从索引处弹出一个元素,索引超界抛出IndexError错误 -
clear() ->None
清除列表所有元素,剩下一个空列表
不推荐使用,可以创建新的列表 -
reverse() ->None
将列表元素反转,返回None
就地修改 -
sort(key=None,reverse=False) -> None
对列表元素进行排序,就地修改,默认升序
reverse为True,反转,降序
key一个函数,指定key如何排序 -
in
[3,4] in [1,2,[3,4]]
for x in [1,2,3,4] -
is
A is B 相同的内存地址 -
id
查看内存序列
(四)列表复制
- import copy导入copy函数
- shadow copy
影子拷贝,也叫浅拷贝,遇到引用类型,只是复制了一个引用而已
list = copy.deepcopy(list) - 深拷贝,拷贝后独立的内存序列
特别注意:深拷贝与浅拷贝的区别
浅拷贝
list = [] #创建一个列表list
list.extend(range(5)) #对列表list赋值
a = [1,2,3,4,list] #创建一个列表a,将列表list添加到列表a
b = a.copy() #对a进行浅拷贝
这时a和b的列表为:
a = [1, 2, 3, 4, [0, 1, 2, 3, 4]]
b = [1, 2, 3, 4, [0, 1, 2, 3, 4]]
修改list列表
list.append(5)
修改后的a和b列表为:
a = [1, 2, 3, 4, [0, 1, 2, 3, 4, 5]]
b = [1, 2, 3, 4, [0, 1, 2, 3, 4, 5]]
深拷贝
import copy
list = [] #创建一个列表list
list.extend(range(5)) #对列表list赋值
a = [1,2,3,4,list] #创建一个列表a,将列表list添加到列表a
b = copy.deepcopy(a) #对a进行深拷贝
这时a和b的列表为:
a = [1, 2, 3, 4, [0, 1, 2, 3, 4]]
b = [1, 2, 3, 4, [0, 1, 2, 3, 4]]
修改list列表
list.append(5)
修改后的a和b列表为:
a = [1, 2, 3, 4, [0, 1, 2, 3, 4, ]]
b = [1, 2, 3, 4, [0, 1, 2, 3, 4, 5]]
浅拷贝只是复制的a的内存序列,而深拷贝是在内存重新开辟出一些空间放置复制的内容
(五)随机数
- random模块
- random(a,b)返回[a,b]之间的整数
- choice(sep)从非空序列元素中水机挑选一个元素,比如random.choice(range(10))从0到9中随机挑选一个整数。
- randrange([start,]stop[,step]从指定范围内,按指定基数递增的集合中获取一个随机 数,基数缺省值为1
- random.shuffle(list) ->None
就地打乱列表顺序 - sample(population,k)从样本空间或总体(序列或者集合类型)中随机抽取K个不同的元素(不是同一个元素),返回一个新的列表