python内置数据类型之列表操作
数据类型是一种值的集合以及定义在这种值上的一组操作。一切语言的基础都是数据结构,所以打好基础对于后面的学习会有百利而无一害的作用。
python内置的常用数据类型有:数字、字符串、Bytes、列表、元组、字典、集合、布尔等
1.什么是列表
lst[#]通过下标访问,从0开始。
ps:如果#超过下标的范围时候会出现IndexError的错误。
如果#为负号,则索引从右边开始,#无论为正负均有范围,超过范围会报错。
lst=list(range(0,9))#生产列表
l1=lst[3]#通过正索引访问元素
l2=lst[-1]#通过负索引访问元素
print(l1)
print(l2)
#说明,如果正负索引超界,则会报错。
#错误代码:IndexError:listindexoutofrange
2.列表元素查找
查找元素:L.index(value,[start[stop]])方法:返回查找到的第一个value值的索引。
start表示从第几个索引开始,stop表示到哪个索引结束,均可省略。
b.但是如果出现stop,其前必须有start值,索引时包含start位置不包含stop位置。
c.如果匹配不到元素,则返回:ValueError:xxisnotinlist
d.index查找元素的时间复杂的为O(n)
lst=list(range(11,19)) print(lst) [11,12,13,14,15,16,17,18] lst.index(13)#13的索引值为2
统计元素:L.count(value)统计列表中出现多少个value值。
len(L),求list列表的长度。
count方法的时间复杂的为O(n)
3.列表元素操作
a.修改元素
直接赋值,L[#]=value。
#为列表的索引值
索引不能越界,会报错IndexError:listassignmentindexoutofrange
修改列表自身
lst=list(range(1,10)) lst[2]=111 lst[4]=123 lst [1,2,111,4,123,6,7,8,9]
b.增加元素
L.append(#),修改L本身,并且追加在列表末尾。
L.extend([#1,#2,#3]),将可迭代对象扩展到列表末尾。
L+[‘a','b','c'],不修改列表本身,返回一个新的列表。
c.插入元素
L.insert(idx,#),将在该idx前插入#,会修改L本身。
当idx为正数,且大于列表本身的索引数,
会实现append方法将插入在元素最末尾;当idx为负数,且小于-len(L)+1时将会插入到列表最前。
append的时间复杂度是O(1),效率和数据的规模无关。
insert的时间复杂度是O(n),效率个数据规模正相关。
d.移除元素
L.remove(value),修改自身,从左到右删除第一个匹配到的值。
L.pop(idx),返回并删除索引指向的值。如果不指定idx,将删除列表最后的元素。
pop不指定值时,时间复杂度是O(1)的;
pop指定idx时,时间复杂度是O(n)的。
L.clear(),删除索引元素。慎用,会引起垃圾回收。
e.列表反转
reverse(),修改自身,反转列表元素。
f.列表排序
L.sort(),排序操作,修改自身,升序排列。L.sort(reverse=True),逆序排列。
4.列表进阶
1.列表复制
copy()方法,列表浅拷贝。遇到引用类型,仅仅复制引用地址。当原来引用类型的值发生变化时,拷贝后的列表的值也随之发生变化。
lst=list(range(4)) lst1=lst.copy() print(lst1) #浅拷贝特性说明 lst=[1,[2,3,4],5] lst1=lst.copy() lst1[1][2]=11 lst[1][0]=22 print(lst) print(lst1) #lst=lst1,引用内的值改变,列表均发生变化。 [0,1,2,3] [1,[22,3,11],5] [1,[22,3,11],5]
copy模块下的deepcopy()提供了深拷贝方法。
importcopy lst=[1,[2,3,4],5] lst1=copy.deepcopy(lst) lst1[1][2]=11 print(lst) print(lst1) #lst!=lst1对比lst.copy方法。 [1,[2,3,4],5] [1,[2,3,11],5]
2.打乱列表
需要引入random模块
#random.shuffle(list) lst=[1,323,4,-3,[1,3],None,(1,34),{1:3}] random.shuffle(lst)#修改自身,返回值为None,不能使用其他空间接受。 lst#通过shuffle打乱后列表的顺序发生变化。 [323,{1:3},None,[1,3],1,-3,4,(1,34)]
random模块的其他对象:
importrandom print(random.randint(1,11))#返回[1,11]之间的整数,注意左右闭区间 print(random.choice(range(11)))#从非空序列中随机挑选一个整数 #randrange([start,]stop[,step])从指定的范围内,按指定基数递增的集合中获取一个随机数 random.randrange(1,7,2)#从[1,7)中,步长为2的数字中获取一个数
总结
以上所述是小编给大家介绍的python内置数据类型之列表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!