第6天 列表
1.什么是列表(list)
"""
列表是容器型数据类型;将[]作为容器标志,里面多个元素用逗号隔开: [元素1, 元素2, 元素3, ...]
列表是可变的(可变指的是元素的个数、值和顺序可变 - 支持增删改);列表有序(支持下标操作)
列表中元素:任何类型的数据都可以作为列表的元素。(没有要求)
元素 - 指的是容器中每一个独立的数据
"""
list1 = [ ]
print ( list1)
list2 = [ 19 ]
list3 = [ 10 , 20 , 89 ]
print ( list3)
list4 = [ 10 , 12.8 , True , 'abc' , [ 100 , 200 ] ]
print ( list4)
2. 获取列表元素
1)获取单个元素
"""
语法:
列表[下标] - 获取指定下标对应的元素
说明:
列表 - 任何结果是列表的表达式, 例如:保存列表的变量或者具体的列表数据
[] - 固定写法
下标 - 下标(又叫索引)是有序序列中元素的位置信息。Python中有序序列中元素的下标有两种:
第1种:从前往后从0开始依次增加
第2种:从后往前从-1开始依次减少
注意:下标不能越界
"""
"""
语法1:
列表[开始下标:结束下标:步长]
1) 确定是否可以获取到数据:从开始下标到结束下标的方向如果和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致就可以获取到数据,否则结果就是空列表
2) 确定有效范围:开始下标对应元素可以取到,结束下标对应的元素取不到 -> [开始下标, 结束下标)
2) 确定切片结果:在有效范围内按照步长绝对值取数据;绝对值为1就一个一个的取,绝对值为2就跳一个取一个
"""
heroes = [ '李白' , '李信' , '张飞' , '关羽' , '刘备' , '安琪拉' , '瑶' , '孙膑' ]
heroes = [ '李白' , '李信' , '张飞' , '关羽' , '刘备' , '安琪拉' , '瑶' , '孙膑' ]
print ( heroes[ 0 : 2 : 1 ] )
print ( heroes[ 0 : - 1 : 1 ] )
print ( heroes[ - 1 : 2 : - 1 ] )
切片 - 获取部分元素
heroes = [ '李白' , '李信' , '张飞' , '关羽' , '刘备' , '安琪拉' , '瑶' , '孙膑' ]
print ( heroes[ 2 : 5 ] )
print ( heroes[ 3 : : - 2 ] )
print ( heroes[ - 3 : : - 1 ] )
"""
语法1:
列表[开始下标:结束下标:步长]
1) 确定是否可以获取到数据:从开始下标到结束下标的方向如果和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致就可以获取到数据,否则结果就是空列表
2) 确定有效范围:开始下标对应元素可以取到,结束下标对应的元素取不到 -> [开始下标, 结束下标)
2) 确定切片结果:在有效范围内按照步长绝对值取数据;绝对值为1就一个一个的取,绝对值为2就跳一个取一个
"""
heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑']
# 开始下标到结束下标的方向如果和步长对应的方向一致,就可以取到数据
print(heroes[0:2:1]) # ['李白', '李信']
print(heroes[0:-1:1]) # ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶']
print(heroes[-1:2:-1]) # ['孙膑', '瑶', '安琪拉', '刘备', '关羽']
# 开始下标到结束下标的方向如果和步长对应的方向不一致,一定取不到数据
print(heroes[1:4:-1]) # []
print(heroes[5:1:2]) # []
"""
语法1: 完整的语法
列表[开始下标:结束下标:步长]
语法2:省略步长
列表[开始下标:结束下标] - 步长为1
语法3:省略开始下标
列表[:结束下标:步长] / 列表[:结束下标] - 如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个元素开始往前取
语法4:省略结束下标
列表[开始下标::步长] / 列表[开始下标:]
如果步长为正,从开始下标开始从前往后取取完为止;如果步长为负,从开始下标开始从后往前取取完
"""
heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑']
print(heroes[1:3]) # ['李信', '张飞']
print(heroes[1:-1]) # ['李信', '张飞', '关羽', '刘备', '安琪拉', '瑶']
print(heroes[3:0]) # []
print(heroes[:3]) # ['李白', '李信', '张飞']
print(heroes[:3:-1]) # ['孙膑', '瑶', '安琪拉', '刘备']
print(heroes[:-2:2]) # ['李白','张飞', '刘备']
print(heroes[3:]) # ['关羽', '刘备', '安琪拉', '瑶', '孙膑']
print(heroes[-2::-2]) # ['瑶', '刘备', '张飞', '李白']
print(heroes[::-1]) # ['孙膑', '瑶', '安琪拉', '刘备', '关羽', '张飞', '李信', '李白']
# 练习:推算以下表达式的打印结果
heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑']
print(heroes[2:5]) # ['张飞', '关羽', '刘备']
print(heroes[3::-2]) # ['关羽', '李信']
print(heroes[-3::-1]) # ['安琪拉', '刘备', '关羽', '张飞', '李信', '李白']
print(heroes[:-4:2]) # ['李白', '张飞']
print(heroes[1::3]) # ['李信', '刘备', '孙膑']
print(heroes[:-2]) # ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉']
3)遍历 - 一个一个的全部取出来
"""
方法一 - 直接获取元素
for 变量 in 列表:
循环体
变量依次获取的就是列表中的每个元素
方法二 - 通过获取每个元素的下标来获取元素
for 变量 in range(列表长度):
循环体
变量依次获取的时候列表中元素的下标
补充:len(列表) - 获取列表的长度
"""
nums = [ 23 , 8.9 , 90 , 89 , 78.3 ]
for x in nums:
print ( 'x:' , x)
print ( '-------------------------------------------' )
for x in range ( len ( nums) ) :
print ( x, nums[ x] )
for x in range ( - 1 , - len ( nums) - 1 , - 1 ) :
print ( x, nums[ x] )
scores = [ 90 , 78 , 54 , 67 , 88 , 30 , 59 ]
count = 0
sum1 = 0
for x in scores:
sum1 += x
if x < 60 :
count += 1
print ( '不及格人数:' , count, '平均分:' , sum1 / len ( scores) )
nums = [ 90 , 1.23 , 'abc' , 12 , 0.12 ]
count = 0
for x in nums:
if type ( x) == int :
count += 1
print ( '整数的个数:' , count)
3.增删改操作
1)增 - 添加元素
"""
1)列表.append(元素) - 将元素添加到列表的最后
2)列表.insert(下标, 元素) - 将元素插入到指定下标前
"""
list1 = [ 10 , 20 ]
print ( list1)
list1. append( 100 )
print ( list1)
scores = [ 90 , 78 , 65 , 45 , 55 , 89 , 30 , 99 ]
new_scores = [ ]
for x in scores:
if x < 60 :
new_scores. append( x)
print ( new_scores)
nums = [ 10 , 20 , 30 , 40 ]
print ( nums)
nums. insert( 1 , 100 )
print ( nums)
nums = [ 12 , 23 , 56 , 78 , 99 , 120 ]
value = 220
for index in range ( len ( nums) ) :
if nums[ index] > value:
nums. insert( index, value)
break
else :
nums. append( value)
print ( nums)
2)删 - 删除元素
"""
1) del 列表[下标] - 删除指定下标对应的元素
"""
tvs = [ '海贼王' , '七龙珠' , '琅琊榜' , '甄嬛传' , '名侦探柯蓝' , '还珠格格' ]
print ( tvs)
del tvs[ 1 ]
print ( tvs)
del tvs[ - 1 ]
print ( tvs)
"""
2) 列表.remove(元素) - 删除指定元素
如果元素不存在会报错;如果元素有多个,只删最前面那一个
"""
tvs = [ '海贼王' , '七龙珠' , '琅琊榜' , '甄嬛传' , '名侦探柯蓝' , '还珠格格' , '甄嬛传' ]
print ( tvs)
tvs. remove( '七龙珠' )
print ( tvs)
tvs. remove( '甄嬛传' )
print ( tvs)
"""
3)
列表.pop() - 取出最后一个元素,并且返回
列表.pop(下标) - 取出指定下标对应的元素,并且返回
"""
tvs = [ '海贼王' , '七龙珠' , '琅琊榜' , '甄嬛传' , '名侦探柯蓝' , '还珠格格' , '甄嬛传' ]
result = tvs. pop( )
print ( tvs, result)
result = tvs. pop( 1 )
print ( tvs, result)
3)改
# 列表[下标] = 值 - 将列表中指定下标对应的元素改成指定的值
movies = ['肖申克的救赎', '海上钢琴师', '长津湖', '罗小黑战记']
movies[0] = 'V字仇杀队'
print(movies) # ['V字仇杀队', '海上钢琴师', '长津湖', '罗小黑战记']
# 练习: 将scores中所有不及格的分数改成0分
scores = [90, 34, 89, 55, 88, 30, 78]
for index in range(len(scores)):
if scores[index] < 60:
scores[index] = 0
print(scores)
4.in 操作
print ( 10 in [ 10 , 20 , 30 ] )
print ( [ 10 , 20 ] in [ 10 , 20 , 30 ] )
print ( [ 10 , 20 ] in [ [ 10 , 20 ] , 30 ] )
5总结–增删改查+in操作
列表[ 下标] - 获取指定下标对应的元素
语法1 : 完整的语法
列表[ 开始下标: 结束下标: 步长]
语法2 :省略步长
列表[ 开始下标: 结束下标] - 步长为1
语法3 :省略开始下标
列表[ : 结束下标: 步长] / 列表[ : 结束下标] - 如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个元素开始往前取
语法4 :省略结束下标
列表[ 开始下标: : 步长] / 列表[ 开始下标: ]
如果步长为正,从开始下标开始从前往后取取完为止;如果步长为负,从开始下标开始从后往前取取完
方法一 - 直接获取元素
for 变量 in 列表:
循环体
变量依次获取的就是列表中的每个元素
方法二 - 通过获取每个元素的下标来获取元素
for 变量 in range ( 列表长度) :
循环体
变量依次获取的时候列表中元素的下标
补充:len ( 列表) - 获取列表的长度
1 )列表. append( 元素) - 将元素添加到列表的最后
2 )列表. insert( 下标, 元素) - 将元素插入到指定下标前
del 列表[ 下标] - 删除指定下标对应的元素
列表. remove( 元素) - 删除指定元素
如果元素不存在会报错;如果元素有多个,只删最前面那一个
列表. pop( ) - 取出最后一个元素,并且返回
列表. pop( 下标) - 取出指定下标对应的元素,并且返回
元素 in 列表 - 判断列表中是否存在指定的元素
元素 not in 列表 - 判断列表中是否不存在指定元素