Python基础-列表

it2022-05-05  155

文章目录

Python基础-列表1.定义及特点2.列表的基础操作2.1创建列表2.2拼接2.3重复2.4偏移和切片2.5增加元素2.6删除元素2.7查询元素:索引,切片2.8几个常用函数2.9赋值与深浅拷贝2.10列表解析式

Python基础-列表

1.定义及特点

列表是Python中最基本的数据结构,用[]括起来。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

特点:有序 ,可重复,类型可变

2.列表的基础操作

2.1创建列表

创建空列表 li=[] 创建多元列表 li=[123,1,'a','b',['i','www']] 强制转化 sr='abcd' lr=list(sr) print(lr)

2.2拼接

li1=['hel'] li2=['lo'] li=[li1+li2] print(li) '[['hel', 'lo']]'

2.3重复

li=[1,'a'] print(li*2) '[1,'a',1,'a']'

2.4偏移和切片

li=['a','2','c','d'[12,'b',2],'ws']print(len(li)) print((li[0],li[-6])) print(li[:4]) print(li[::-1]) print(li[4][2])#先调出元素123 然后取出其中第三个 ''' 输出为6 ('a', 'a') ['a', '2', 'c', 'd'] ['ws', ['123', 'b', 2], 'd', 'c', '2', 'a'] 2'''

2.5增加元素

函数名描述list.append(obj)在列表末尾添加新的对象list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)list.insert(index,obj)将对象插入列表 append() li=['cheer','down'] print(id(li)) li1=['a','b',3] li.append(li1) print((li,id(li))) #发现li所指向的地址没变 '''输出为 41031432 (['cheer', 'down', ['a', 'b', 3]], 41031432)''' extend() li=['cheer','down'] li1=['a','b',3] li.extend(li1)#将li拆分之后,一个一个元素按序放入li print(li) ''' 输出为: ['cheer', 'down', 'a', 'b', 3] ''' insert() li=['cheer','down'] li1=['a','b',3] li.insert(1,li1)#将li1整体放入li的第一位,其他元素后移一位 print(li) '''输出为: ['cheer', ['a', 'b', 3], 'down']'''

2.6删除元素

函数名描述list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值list.remove(obj)移除列表中某个值的第一个匹配项del list[n]移除列表中序列值为n的元素list.clear移除列表所有元素

Demo:

li=['r','o','b','o','t'] print(li.pop(1))#li.pop返回被丢弃的元素 print(li) print(li.remove('o'))#无返回值,移出第一次遇到的指定元素 print(li) del li[1] print(li) li.clear()#全部删除 print(li) '''输出为: o ['r', 'b', 'o', 't'] None ['r', 'b', 't'] ['r', 't'] []'''

2.7查询元素:索引,切片

元素遍历 li=['a','b','c','e'] for i in li: print(i) 索引遍历 for i in range(len(li)): print(li[i])

枚举遍历:

enumerate(),对于一个可迭代/可遍历的对象(列表,字符串)将其组成一个索引序列,利用它,我们可以同时获得索引和值

for i in enumerate(li,0): print(i) ''' (0, 'a') (1, 'b') (2, 'c') (3, 'e')'''

2.8几个常用函数

计数 count()反转reverse()排序 sort()

2.9赋值与深浅拷贝

赋值定义:赋值是对对象的引用,指向对象所在地址 la=[1,2,3,4,5,6,7,'s',['x','y']] lb=la print(id(la),id(lb)) '31200712 31200712'

拷贝:原则上就是把数据分离出来,复制其数据,并以后修改互不影响。

浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层

三种实现:

-切片操作[:]

工厂函数list(li)

copy模块内的copy函数

la=[1,2,3,4,5,6,7,'s',['x','y']] lb=la lb2=la[:] print(id(la),id(lb2)) import copy lb_copy=copy.copy(la) print(id(la),id(lb_copy)) la.append('test') #添加一个原子类型,不会影响lb_copy和lb2 la[8][0]='xxxx#' print(la) print(lb_copy) print(id(['xxxx','y'])) print(id(la[8][0]),id(lb_copy[8][0])) ''' 42966344 42966408 42966344 43403080 [1, 2, 3, 4, 5, 6, 7, 's', ['xxxx#', 'y'], 'test'] [1, 2, 3, 4, 5, 6, 7, 's', ['xxxx#', 'y']] 43403272 42960072 42960072 #可以看到la和lb_copy中的列表地址是相同的 ''' 深拷贝:数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享) import copy la=[1,2,3,4,5,6,7,'s',['x','y']] lb_deepcopy=copy.deepcopy(la) la[5]='ssss' la[8][0]='sssssssss' print(la,id(la),id(la[8][0])) print(lb_deepcopy,id(lb_deepcopy),id(lb_deepcopy[8][0])) ''' [1, 2, 3, 4, 5, 'ssss', 7, 's', ['sssssssss', 'y']] 43337672 34805360 [1, 2, 3, 4, 5, 6, 7, 's', ['x', 'y']] 43338952 33844560''' #可以看到 la和lb_deepcopy中的列表地址也是完全不同的

2.10列表解析式

列表解析式:它可以根据已有列表,高效创建新列表的方式。列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,返回的是一个列表,因此用在[]中

实现原理:迭代[可迭代对象]中的每一个元素每迭代一次的结果赋值给对应的迭代元素,通过表达式运算,得到一个新的值最后将得到的所有值以一个列表的形式返回

#格式 [表达式 for 迭代元素 in 可迭代对象] #下面两个函数意思等同: li=[] for x in range(10): li.append(x) print(li) print([x for x in range(10) if x%2==0]) #带过滤功能格式:下面两个的意思也完全一样 [exp for iter_val in iter if if_contion] li=[] for lter_val in iter: if if_contion: li.append(lter_val)

最新回复(0)