文章目录
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)