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全栈之路----数据结构—列表的主要内容,如果未能解决你的问题,请参考以下文章

6Python全栈之路系列之元组数据类型

Python全栈之路Day14

python全栈之路测试 2

Python全栈之路----数据类型—元组类型

Python全栈之路Day16

Python全栈之路——列表list(Day 04)