Python全栈之路----数据结构—列表
Posted 沫小妤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈之路----数据结构—列表相关的知识,希望对你有一定的参考价值。
1.列表是一个数据的集合,集合内可以放任何数据类型,可对集合进行方便的增删改查操作。列表里面的数可以重复。
L1 = [ ] #定义空列表 L2 = [ ‘a‘ , ‘b‘ , ‘c‘ , ‘d‘ ] #存四个值,索引为0-3 L3 = [ ‘abc‘ , [ ‘def‘ , ‘ghi‘ ] ] #嵌套列表
2.列表的功能:
创建,查询( L[n]索引值为n的元素;L.count(n)查找有多少个元素为n;L.index(n)查找元素为n的索引值),切片,增加(L.append(n)在最后加入为n的元素;L.insert(m,n)在索引值为m的位置插入元素n),修改,删除(L del[n]删除索引值为n的元素;L.remove(n)删除从左边数第一个为n的元素;L.pop()删除最后一个元素,返回最后一个元素的值),循环,排序(字符和数字单独排序,L.sort()正序 ;L.reserve()倒序)。
1 >>> L2 = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,1,2] #创建一个列表 2 >>> L2[2] #通过索引取值 3 ‘c‘ 4 >>> L2[-1] #通过索引从裂变右边开始取值 5 2 6 >>> L2.index(‘a‘) #返回指定元素索引值,从左向右查找,找到第一个匹配的字符的位置 7 0 8 >>> L3 = [1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,8,8,8,8,8,8] 9 >>> L3[2] #通过索引值取值 10 1 11 >>> L3.count(3) #查找有多少个字符为3的索引 12 7 13 >>> n = L3.index(2) 14 >>> L3[n] #n是L3种2的索引值,L3[n]是索引值为n的元素 15 2 16 >>> L3[L3.index(2)] 17 2 18 >>> L3[0:3] #列表切片,顾头不顾尾 19 [1, 1, 1] 20 >>> L3[-5:-1] #后面的列表切片,顾头不顾尾 21 [8, 8, 8, 8] 22 >>> L3[-5:] #-5位置的字符及其后面的所有字符 23 [8, 8, 8, 8, 8] 24 >>> L3[:3] 25 [1, 1, 1] 26 >>> L3[:] #和L3输出结果一致 27 [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8] 28 >>> L3[:7:2] #0-6切片,先取L3[0],然后每两个取一个 29 [1, 1, 1, 2] 30 >>> L3[:9:3] #3叫做步长 31 [1, 1, 2] 32 >>> L3.append(‘Alex‘) #在列表最后面追加字符 33 >>> L3 34 [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, ‘Alex‘] 35 >>> L3.insert(0,‘Jane‘) #在列表索引值为0的位置插入数据Jane 36 >>> L3 37 [‘Jane‘, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, ‘Alex‘] 38 >>> L3[3] = ‘Mary‘ #把索引值为3的位置的元素替换成Mary 39 >>> L3 40 [‘Jane‘, 1, 1, ‘Mary‘, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, ‘Alex‘] 41 >>> L3[4:6] = ‘PeiQi‘ #批量修改,由于位置不够,PeiQi被拆分,后面的元素后移 42 >>> L3 43 [‘Jane‘, 1, 1, ‘Mary‘, ‘P‘, ‘e‘, ‘i‘, ‘Q‘, ‘i‘, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, ‘Alex‘] 44 >>> L3.pop() #删除最后一个元素,返回最后一个元素的值 45 ‘Alex‘ 46 >>> L3.remove(4) #删除从左边数第一个为4的元素 47 >>> L3 48 [‘Jane‘, 1, 1, ‘Mary‘, ‘P‘, ‘e‘, ‘i‘, ‘Q‘, ‘i‘, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8] 49 >>> del L3[3] #全局性指令,删除索引值为3的元素 50 >>> L3 51 [‘Jane‘, 1, 1, ‘P‘, ‘e‘, ‘i‘, ‘Q‘, ‘i‘, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8] 52 >>> del L3[8:16] #批量删除,顾头不顾尾 53 >>> L3 54 [‘Jane‘, 1, 1, ‘P‘, ‘e‘, ‘i‘, ‘Q‘, ‘i‘, 3, 3, 3, 3, 3, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8]
(3)列表是有序的,但int和str类型不能一起排序。str按照ASCII排序,sort是排序,reverse是顺序反过来,extend是扩展,clear是把整个列表清空,copy是拷贝。
copy: 查看内存地址 id(i) 变量有地址,列表本身有一个地址,列表中的每一个元素又都有自己单独的地址
如果 a = 1 a = b ,b指向的是1,不是a,b不随着a的变化而变化;
如果L1 = L ,L1指向L的内存地址,将L的内存地址比作一个装了很多水果的果盘,那么L1也指的是这个果盘,那么L变化实际是果盘变化,所以L1随L的变化而变化,同时L也会随L1的变化而变化;
如果L1 = L.copy(),将L的内存地址比作一个装了很多水果的果盘,那么L1指的是将这个果盘复制的一个新果盘,但是果盘里的水果并没有被复制,水果是两个果盘共享,所以L变化是旧果盘变化,新果盘不变,所以L1不随L的变化而变化;
>>> L = [‘a‘,‘d‘,‘b‘,‘r‘,‘A‘] >>> L.sort() #将L排序 >>> L [‘A‘, ‘a‘, ‘b‘, ‘d‘, ‘r‘]>>> L.insert(2,‘*‘) >>> L.insert(3,‘#‘) >>> L [‘A‘, ‘a‘, ‘*‘, ‘#‘, ‘b‘, ‘d‘, ‘r‘] >>> L.sort() #按照ASCI码排序 >>> L [‘#‘, ‘*‘, ‘A‘, ‘a‘, ‘b‘, ‘d‘, ‘r‘] >>> L.reverse() #把顺序反过来 >>> L [‘r‘, ‘d‘, ‘b‘, ‘a‘, ‘A‘, ‘*‘, ‘#‘] >>> L4 = [1,2,3,4] >>> L + L4 #L和L4拼接在一起 [‘r‘, ‘d‘, ‘b‘, ‘a‘, ‘A‘, ‘*‘, ‘#‘, 1, 2, 3, 4] >>> L.extend(L4) #把L4扩展到L里面 >>> L [‘r‘, ‘d‘, ‘b‘, ‘a‘, ‘A‘, ‘*‘, ‘#‘, 1, 2, 3, 4] >>> L.clear() #清空 >>> L [] >>> L = [1,2,4,5] >>> L.copy() [1, 2, 4, 5] >>> L1 = L.copy() >>> L1 [1, 2, 4, 5] >>> L=[3,4,5] >>> L1 [1, 2, 4, 5] >>> L1 = L >>> L[2] = ‘Alex‘ >>> L [3,4, ‘Alex‘] >>> L1 [3,4, ‘Alex‘]
(4)深浅copy
①浅copy:n3 = names 两个列表中的小列表元素改变同步,其余元素独立改变
>>> names = [‘alex‘,‘jack‘,‘jane‘,[‘LT‘,‘19‘]] >>> n3 = names.copy() >>> names [‘alex‘, ‘jack‘, ‘jane‘, [‘LT‘, ‘19‘]] >>> n3 [‘alex‘, ‘jack‘, ‘jane‘, [‘LT‘, ‘19‘]] >>> names[0] = ‘Alex‘ >>> names [‘Alex‘, ‘jack‘, ‘jane‘, [‘LT‘, ‘19‘]] >>> n3 [‘alex‘, ‘jack‘, ‘jane‘, [‘LT‘, ‘19‘]] >>> n3[2] = ‘Jane‘ >>> n3 [‘alex‘, ‘jack‘, ‘Jane‘, [‘LT‘, ‘19‘]] >>> names [‘Alex‘, ‘jack‘, ‘jane‘, [‘LT‘, ‘19‘]] >>> n3[3][1] = 20 >>> n3 [‘alex‘, ‘jack‘, ‘Jane‘, [‘LT‘, 20]] >>> names [‘Alex‘, ‘jack‘, ‘jane‘, [‘LT‘, 20]]
②深copy:将列表完全复制,两个列表完全独立
>>> import copy >>> n = copy.deepcopy(names) >>> n [‘Alex‘, ‘jack‘, ‘jane‘, [‘LT‘, 20]] >>> n[3][0] = ‘LongTing‘ >>> n [‘Alex‘, ‘jack‘, ‘jane‘, [‘LongTing‘, 20]] >>> names [‘Alex‘, ‘jack‘, ‘jane‘, [‘LT‘, 20]]
以上是关于Python全栈之路----数据结构—列表的主要内容,如果未能解决你的问题,请参考以下文章