列表
列表是容器型数据类型,能够更方便的保存数据
一、列表的性质
1.列表是一个有序的容器型数据类型(有序代表列表中每个元素有自己的固定位置:下标)
2.列表是一个可变的容器型数据类型(可变代表列表中元素可以被修改:增删改
3.列表使用[ ],列表中元素之间使用,逗号隔开
4.列表的数据类型:list,列表中可以存放任意类型的数据
5.列表中可以出现重复元素
二、创建一个空列表
list = [ ]
print ( list , type ( list ) )
三、下标和切片
下标:每个元素都有自己的位置
从左向右:正向下标,从0开始递增
从右向左:负向下标,从-1开始递减
list1 = [ 100 , 200 , 300 , 400 , 500 ]
通过下标获取元素:语法 — 容器[下标]
print ( list1[ 2 ] , list1[ - 3 ] )
切片:能够从原容器中获得新的子容器(从原容器中获取N个元素组成新的容器)
切片语法:
容器[start: stop: step]
start:开始参数,默认为0,可以省略不写
stop:结束参数,当要获取最后一个元素时,可以不写
step:步长,决定下一个被获取元素的下标,默认为1,可以省略不写
切片也是一个左闭右开的区间,下一个被获取元素的下标 = 当前被获取元素的下标 + step
当step>=1时,start代表的元素必须在stop代表的元素左侧
当step<=-1时,start代表的元素必须在stop代表的元素右侧,同时步长step<=-1也表示逆序
四、列表的遍历(列表中使用循环)
1.直接遍历
for i in list1:
print ( i)
2.间接遍历
len():能够查看容器中元素的个数(返回容器的长度)
print ( len ( list1) )
for j in range ( len ( list1) ) :
print ( f'下标 { j} ---> 元素 { list1[ j] } ' )
五、列表的拼接与重复
1.列表的拼接
print ( list1 + list2)
2.列表的重复
print ( list1 * 5 )
六、列表的增删改
1.增加
game = [ ]
append( ):向列表中追加元素
game. append( '王者荣耀' )
game. append( '和平精英' )
print ( game)
运行结果:[ '王者荣耀' , '和平精英' ]
insert( ):向列表中插入元素
game. insert( 1 , '穿越火线' )
print ( game)
运行结果:[ '王者荣耀' , '穿越火线' , '和平精英' ]
1代表插入元素的位置
2.修改
容器[下标] = 新的值
game[ 2 ] = '欢乐斗地主'
运行结果:[ '王者荣耀' , '穿越火线' , '欢乐斗地主' ]
3.删除
del:根据指定下标删除元素
del game[ 0 ]
print ( game)
运行结果:[ '穿越火线' , '欢乐斗地主' ]
remove( ):删除指定元素
game. remove( '穿越火线' )
运行结果:[ '欢乐斗地主' ]
pop:根据下标删除元素,使用pop删除的元素还能被找回
content = game. pop( 0 )
print ( game, content)
运行结果:[ ] 欢乐斗地主
clear( ):直接清空列表
list3 = [ '阿甘正传' , '海王' , '阿凡达' , '霸王别姬' , '憨豆特工' , '红海行动' ]
list3. clear( )
print ( list3)
运行结果:[ ]
以上列表的增删改操作都是建立在games这个列表基础上的。
删除操作:del、remove、clear等于电脑中直接删除文件。
而pop等于将文件删除时放入回收站,还可以恢复。
七、列表的相关方法
1.index:从列表中查找指定元素的下标。(如果index找不到元素会报错)
list4 = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 5 ]
result = list4. index( 5 )
print ( result)
运行结果:4
还可以指定开始查找的位置(从下标为6的位置开始查找5)。
2.sort:将列表从小到大排序,sort方法修改的是列表本身
list1 = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 5 ]
list1. sort( )
print ( list1)
运行结果:[ 1 , 2 , 3 , 4 , 5 , 5 , 6 , 7 ]
添加参数reverse=True,就可以从大到小排序
list1. sort( reverse= True )
print ( list1)
运行结果:[ 7 , 6 , 5 , 5 , 4 , 3 , 2 , 1 ]
3.sorted:将列表从小到大排序,sorted方法不会修改列表本身
list2 = [ 2 , 4 , 1 , 0 ]
print ( sorted ( list2) , list2)
运行结果:[ 0 , 1 , 2 , 4 ] [ 2 , 4 , 1 , 0 ]
添加参数reverse=True,就可以从大到小排序
print ( sorted ( list2, reverse= True ) , list2)
运行结果:[ 4 , 2 , 1 , 0 ] [ 2 , 4 , 1 , 0 ]
4.reverse:能够将列表倒序,reverse修改的是列表本身
list4 = [ 1 , 2 , 3 , 4 , 5 ]
list4. reverse( )
print ( list4)
运行结果:[ 5 , 4 , 3 , 2 , 1 ]
5.extend:能够将容器中的元素全部添加到列表中
list5 = [ ]
list5. append( list4)
list5. extend( list4)
list5. extend( range ( 0 , 9 , 2 ) )
print ( list5)
运行结果: [ [ 5 , 4 , 3 , 2 , 1 ] , 5 , 4 , 3 , 2 , 1 , 0 , 2 , 4 , 6 , 8 ]
6.count:计数,统计列表中某个元素的出现次数
list6 = [ [ 5 , 4 , 3 , 2 , 1 ] , 5 , 4 , 3 , 2 , 1 , 0 , 2 , 4 , 6 , 8 ]
print ( list6. count( 2 ) )
运行结果:2
7.sum:针对于数字列表(列表中全部都是数字的列表)求和
list7 = [ 1 , 2 , 3 ]
print ( sum ( list6) )
运行结果:6
8.max、min:查看列表中的最大值、最小值
list8 = [ 1 , 2 , 3 ]
print ( max ( list8) , min ( list8) )
运行结果:3 1
八、列表比较大小
1.列表比较大小比较的是列表中元素的大小。
2.列表中参与比较大小的元素位置是一一对应的。
3.从第一对元素开始比较,直到分出大小;否则,两个列表相等。
4.比较大小的元素必须是相同数据类型的。
list1 = [ 1 , 2 , 3 ]
list2 = [ 2 ]
list3 = [ 1 , 2 , 4 ]
print ( list1 > list2)
print ( list1 < list3)
运行结果:False
True
九、列表的删除
例:有一个长度是10的列表,数组内有10个人名,要求去掉重复的
names = [‘张三’, ‘李四’, ‘大黄’, ‘张三’,‘张三’, ‘李四’, ‘大黄’, ‘张三’, ‘张三’, ‘李四’]
最后得到names = [‘张三’, ‘李四’, ‘大黄’]
1.间接去重
names = [ '张三' , '李四' , '大黄' , '张三' , '张三' , '李四' , '大黄' , '张三' , '张三' , '李四' ]
newNames = [ ]
for i in names:
if i not in newNames:
newNames. append( i)
print ( newNames)
运行结果:[ '张三' , '李四' , '大黄' ]
not in 和 in为成员运算,判断某个元素是否在容器中,返回True或者False。
2.for循环元素个数去重
names = [ '张三' , '李四' , '大黄' , '张三' , '张三' , '李四' , '大黄' , '张三' , '张三' , '李四' ]
for i in range ( len ( names) - 1 , - 1 , - 1 ) :
if names. count( names[ i] ) > 1 :
del names[ i]
print ( names)
运行结果:[ '张三' , '李四' , '大黄' ]
3.while循环判断元素个数
names = [ '张三' , '李四' , '大黄' , '张三' , '张三' , '李四' , '大黄' , '张三' , '张三' , '李四' ]
x = 0
while x <= len ( names) - 1 :
if names. count( names[ x] ) > 1 :
del names[ x]
else :
x = x + 1
print ( names)
运行结果:[ '大黄' , '张三' , '李四' ]
十、列表推导式
作用:能够更快的一次性生成有更多元素的列表
1.语法:[表达式 for 变量 in 容器]
list1 = [ i for i in range ( 1 , 11 ) ]
print ( list1)
运行结果:[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
2.带条件的列表推导式语法:[表达式 for 变量 in 容器 if 条件]
list2 = [ i for i in range ( 1 , 11 ) if i % 2 != 0 ]
print ( list2)
运行结果:[ 1 , 3 , 5 , 7 , 9 ]
3.双重或多重循环语法:[表达式 for 变量 in 容器 for 变量 in 容器]
list3 = [ f' { x} * { y} = { x * y} ' for x in range ( 1 , 4 ) for y in range ( 1 , 4 ) ]
print ( list3)
运行结果:[ '1 * 1 = 1' , '1 * 2 = 2' , '1 * 3 = 3' , '2 * 1 = 2' , '2 * 2 = 4' , '2 * 3 = 6' , '3 * 1 = 3' , '3 * 2 = 6' , '3 * 3 = 9' ]
十一、性能对比
在某种程度上,列表推导式可以去替代append方法
列表推导式也是向列表中添加元素。
列表推导式性能优于append方法
例:同时使用append和列表推导式,向列表中添加元素,性能对比。
import time
start1 = time. time( )
list1 = [ ]
for i in raneg( 1 , 100000000 ) :
list1. append( i)
end1 = time. time( )
start2 = time. time( )
list2 = [ i for i in range ( 1 , 100000000 ) ]
end2 = time. time( )
print ( f'方法一花费时间: { end1 - start1} ' )
print ( f'方法二花费时间: { end2 - start2} ' )
运行结果:方法一花费时间:9.436340808868408
方法二花费时间:6.642916440963745