列表
不同于C中数值只能存储同一数据类型的元素。Python中的列表可以同时存储str,int,float,bool多种类型
一大优点:自动根据需要动态分配和回收内存
其id不同于C中数组的地址只与首元有关,列表的id与 内部元素 及 操作 有关
list中存的指针数组的id,指针数组的每个指针才具体指向元素的id
创建方式
list1=['asd',3,True] #直接创建
list2=list(['sss',9,False]) #通过函数list()创建
获取长度
len(list)
即可得到列表内元组的个数
取出方法
- 可使用for-in语句取出
for i in list2:
print(i,end='\t')
- 可使用具体索引取出(类似数组)。不可超出范围:正:0 ~ N-1,逆:-N ~ -1。超出则报错
正序索引:0,1,2,3…
print(list2[1]) # sss
逆序索引:-1,-2,-3…
print(list2[-1]) #False
查询操作
使用list.index()
函数
- 返回元素索引,多个元素返回第一个(正序)
- 若找不到会报错:xx is not in list
- 可以直接用
print(list.index(9))
输出,也可以用b=list.index('9')
然后print(b)
print(list2.index(9))
b=list2.index('sss')
print(b)
指定索引查找
list.index('hello',1,3)
在list内查找‘hello’,索引范围是1,2(不包括3)
切片:获取列表某些片段
一旦使用切片,就创建了新的列表对象,id会发生变化
list[start:stop:step]
范围是:start ~ stop,不包含stop,但是不包括 stop
起始为start,若不设定起始,默认0开始
结束为stop,若不设定结束,默认最后一个结束
步长是step,若不设定步长,默认为1
例如:取列表索引为1~6的元素,步长为1
print(list2[1:6:1])
b=list2[1:6:2] #也可以直接赋给某个对象,那个对象就是切出来的片段
print(b)
- 注意:
step若取负值,起始和结束意义不变,只是切片方向变化:
print(list2)
print(list2[2::-1])
起始为2,即为列表中False的位置,未设置结束值,步长为-1,则逆序输出:False,9,sss
增加列表元素
直接加到表尾,id标识不变
给表尾增加单个元素
list.append()
id不发生变化
print(list2)
list2.append(100)
print(list2)
因为是增加一个元素,所以即使增加多个元素也会被当做一个整体的列表
print(list2)
list3=[123,456]
list2.append(list3)
print(list2)
其中[123,456]被当做一个元素了
给表尾增加多个元素
list.extend
print(list2)
list3=[123,456]
list2.extend(list3)
print(list2)
不同于append,extend函数给表尾增加独立的多个元素
任意位置添加元素
list.insert(positon,val)
在列表的position位置添加变量val,原位和之后的都往后移。
print(list2)
list2.insert(1,999)
print(list2)
增加在第1个索引,原来的9,False…都后移
将任意位置前后几个元素换掉
list[start:stop:step]=[1,2,3]
类似覆盖赋值
例如:将列表中索引 0~3 换为:1,2,3,4
print(list2)
list2[0:4:1]=[1,2,3,4]
print(list2)
当然,就像切片一样,还可以选择步长替换,逆序替换等
例如:索引0~5,每2个进行一次替换
print(list2)
list2[0:6:2]=['ww','mm','tt']
print(list2)
删除列表元素
移除一个元素
list.remove(val)
移除值为 val 的元素
若有多个值为val的元素,则只移除第一个
print(list2)
list2.remove(9)
print(list2)
删除指定索引的元素
list.pop(索引)
若不设定索引,会默认删除表尾元素
设定删除下标为2的
print(list2)
list2.pop(2)
print(list2)
切下需要的部分
想删除索引2之后的所有元素
print(list2)
new_list=list2[0:3] #new_list为list2的0~2
print(new_list)
print(list2)
看似是删除后面,本质是把需要的切下来,赋给新对象,原有list2没有变化。
用空覆盖要删的元素
list.[1:3]=' '
本质是用“空”覆盖需要删的元素
print(list2)
list2[0:3]=''
print(list2)
删除整个列表
del list
删除列表list
修改列表元素
直接修改
list[2]=2
切片修改
list[1:3]=[100,200]
print(list2)
list2[1:3]=[100,200]
print(list2)
若修改元素的个数超过初始到结束个数时,多出的部分会插入位置
print(list2)
list2[1:3]=[100,200,300,400]
print(list2)
排序列表
sort()方法
直接更改原有列表顺序
list.sort()
默认是递增顺序排列
当reverse=1 or 0 时设定增序降序
list.sort(reverse=False)
0为递增排序
list.sort(reverse=True)
1为递减排序
内置函数sorted()方法
不更改原有列表顺序 ,直接新建立一个对象
默认升序:
list3=[1,3,5,7,9,2,4,6,8,10]
print(list3)
new_list=sorted(list3)
print(new_list)
加上reverse=True变成降序:
list3=[1,3,5,7,9,2,4,6,8,10]
print(list3)
new_list=sorted(list3,reverse=True)
print(new_list)
列表生成式
[i for i in range()]
本质是用for-in语句多次取值i , 列表元素的值为 i
print('--------生成列表-----------')
list=[i*2 for i in range(1,10,2)]
print(list)
此处的i*2,也就是对range出的列表:1,3,5,7,9进行乘2。
多维列表
声明时使用:w=[[1,2,3],[2,3,4],[3,4,5]]
即:用方括号嵌套两层构成二维列表
w=[[1,2,3],[2,3,4],[3,4,5]]
print(w[0]) #[1, 2, 3]
print(w[0][1]) #2