4.18 列表学习日记及答案
认识列表
1.容器型数据类型(序列)
变量从是否是容器分为:非容器型数据类型的变量和容器型数据类型的变量;
非容器型数据类型的变量 - 一个盒子里面只有一个格子,所以同一时间只能保存一个数据。eg:int,float,bool,None
容器型数据类型的变量 - 一个盒子里面有多个格子,每个格子可以存储不一样的数据,所以同一时间就可以保存多个数据。
eg: list、dict、tuple、set、str等
scores = [ 89 , 30 , 20 , 39 , 73 , 45 , 3 ]
print ( sum ( scores) )
print ( sum ( scores) / len ( scores) )
ave = sum ( scores) // len ( scores)
print ( ave)
print ( len ( scores) )
print ( max ( scores) , min ( scores) )
2) 什么是列表(list)
1)列表是容器型数据类型(可以同时保存多个数据);
2)将[]作为容器标志,里面多个元素用逗号隔开:[元素1, 元素1, 元素3, …]
3)列表是可变的(指的是元素的个数、值和顺序可变 - 支持增删改查);
列表是有序的(支持下标操作)
4)列表中元素:任何类型的数据都可以作为列表中的元素
元素 - 指的是容器中每一个独立的数据
空列表
list1 = [ ]
print ( list1)
list2是一个列表,列表只有一个元素
list2 = [ 19 ]
list3 = [ 11 , 22 , 33 ]
相同类型元素的类型
list5 = [ 29 , 49 , 56 , 67 ]
print ( list5)
同一个列表中元素可以是不同类型的数据
list4 = [ 11 , 'abc' , 3.14 , [ 22 , 33 ] , True ]
print ( list4)
# 3.列表是有序
print ( [ 10 , 20 , 30 ] == [ 10 , 30 , 20 ] )
print ( { 10 , 20 , 30 } == { 10 , 30 , 20 } )
获取元素
1.获取单个元素
语法:列表[下标] - 获取指定下标的元素
说明:
1)列表 - 任何结果是列表的表达式,例如:保存列表的变量或者具体的列表数据
2)[] - 固定写法
3)下标 - 整数,下标(index)是有序序列中元素的位置信息。
Python中有序序列中元素的下标有两种:
第1种:从前往后从0开始依次增加
第2种:从后往前从-1开始依次减少
注意:下标不能越界
games = [ '英雄联盟' , '王者荣耀' , '开心消消乐' , '炉石传说' , '部落冲突' , '原神' , '绝地求生' ]
print ( games[ 1 ] )
print ( games[ - 6 ] )
print ( [ '英雄联盟' , '王者荣耀' , '开心消消乐' , '炉石传说' , '部落冲突' , '原神' , '绝地求生' ] [ 1 ] )
list1 = [ 10 , 20 , 30 ]
print ( list1[ 2 ] )
print ( list1[ - 2 ] )
2.切片 - 获取部分元素
1)完整语法:
列表[开始下标:结束下标:步长 ]
2)切片过程:
第一步:确定结果是否为空:从开始下标到结束下标的方向如果和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致就可以获取数据,否则无法获取数据
第二步:确定有效范围:开始下标对应元素可以取到,结束下标对应元素取不到 -> [开始下标, 结束下标)
第三步:获取元素:步长的正负确定获取方向;步长绝对值确定获取时是否跳着取(在有效范围内按照步长绝对值取数据;绝对值为1就一个一个取,绝对值为2就跳一个取一个)
3)写切片表达式获取指定的结果
第一步:确定开始下标:看结果中第一个在原列表的下标
第二步:确定步长:看获取元素方向来确定正负;看取值的时候跳过情况确定绝对值
第三步:确定结束下标:[开始下标, 结束下标)对应的范围能够包含所有情况
heroes = [ '李白' , '李信' , '张飞' , '关羽' , '刘备' , '安琪拉' , '瑶' , '孙膑' ]
games = [ '诛仙' , '英雄联盟' , '王者荣耀' , '开心消消乐' , '炉石传说' , '部落冲突' , '原神' , '绝地求生' ]
print ( games[ 1 : - 1 : 3 ] )
print ( games[ 2 : 6 : - 2 ] )
print ( games[ 0 : 5 : 4 ] )
print ( games[ 6 : - 4 : - 1 ] )
print ( games[ 1 : 5 : 1 ] )
print ( games[ - 3 : 1 : - 3 ] )
print ( games[ 2 : - 1 : 2 ] )
print ( games[ - 1 : 0 : - 3 ] )
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 ] )
print ( heroes[ 1 : 5 : 1 ] )
print ( heroes[ 5 : 1 : - 1 ] )
2)切片省略写法
列表[开始下标:结束下标:步长 ]
1.省略步长: 列表[开始下标:结束下标] -> 列表[开始下标:结束下标:1]
省略步长的时候,步长为1
2.省略开始下标: 列表[:结束下标:步长]、列表[:结束下标]
如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个开始往前取
3.省略结束下标: 列表[开始下标::步长]、列表[开始下标:]
如果步长为正,从开始下标开始往后取,一直取到最后一个元素;如果步长为负,从开始下标开始往前取,取到第一个元素为止
movies = [ '肖申克的救赎' , '双城之战' , '你的名字' , '海上钢琴师' , '风雨哈佛路' , '当幸福来敲门' , '乡村老尸' , '咒怨' ]
print ( movies[ 2 : 5 ] )
print ( movies[ 1 : - 2 ] )
print ( movies[ - 2 : 2 ] )
print ( movies[ : 3 ] )
print ( movies[ : 3 : - 1 ] )
print ( movies[ : - 2 : - 2 ] )
print ( movies[ 2 : ] )
print ( movies[ 3 : : 2 ] )
print ( movies[ 3 : : - 2 ] )
练习 [‘肖申克的救赎’, ‘双城之战’, ‘你的名字’, ‘海上钢琴师’, ‘风雨哈佛路’, ‘当幸福来敲门’, ‘乡村老尸’, ‘咒怨’]
print ( movies[ - 2 : : - 3 ] )
print ( movies[ 3 : 6 ] )
print ( movies[ : - 3 ] )
print ( movies[ : 4 : 2 ] )
print ( movies[ - 4 : : 2 ] )
print ( movies[ 1 : : 4 ] )
print ( movies[ : : 3 ] )
print ( '================================================' )
3.遍历 - 将列表中的元素一个一个的全部取出来
"""
方法1:
for 变量 in 列表:
循环体
方法2 - 通过遍历下标来遍历元素
for 变量 in range(len(列表)):
循环体(变量取到的是每个元素的下标,列表[下标]就可以获取到元素)
方法3 - 同时获取下标和元素
for 变量1,变量2 in enumerate(列表):
循环体(变量1依次获取到每个元素的下标,变量2依次获取到每个元素)
"""
for i in games:
print ( i)
print ( '================================================' )
nums = [ 28 , 39 , 49 , 45 , 20 , 40 ]
s = 0
for x in nums:
s += x
print ( s)
print ( '================================================' )
count = 0
for x in nums:
if x % 2 :
count += 1
print ( count)
print ( '================================================' )
for x in range ( len ( games) ) :
print ( x, games[ x] )
print ( '================================================' )
for x in range ( len ( movies) - 1 , - 1 , - 1 ) :
print ( x, movies[ x] )
print ( '================================================' )
for x, y in enumerate ( games) :
print ( x, y)
增删改
1.增
nums = [ 10 , 20 ]
print ( nums)
nums. append( 100 )
print ( nums)
nums. append( 200 )
nums. append( [ 100 , 200 ] )
print ( nums)
nums. insert( 1 , 1000 )
print ( nums)
2.删除
del 列表[下标] - 删除指定下标对应元素
列表.remove(元素) - 删除指定元素(只删除重复元素中第一个;如果列表中没有元素会报错)
列表.pop() - 取出最后一个元素
列表.pop(下标) -取出指定下标对应元素
del nums[ 2 ]
print ( nums)
x = nums. remove( 100 )
print ( x)
print ( nums)
x = nums. pop( )
print ( x, 's' )
print ( nums)
nums. pop( 2 )
print ( nums)
3.改
列表[下标] = 新值 - 将列表指定下标对应元素修改成指定值
games = [ '诛仙' , '英雄联盟' , '王者荣耀' , '开心消消乐' , '炉石传说' , '部落冲突' , '原神' , '绝地求生' ]
games[ 1 ] = '红色警戒'
print ( games)
4.in和not in
元素 in 列表 - 判断列表中是否存在指定元素:存在就返回True;否则返回False
print ( '英雄联盟' in games)
print ( '红色警戒' in games)
作业
1.已知一个数字列表,求列表中心元素。
list1 = [ 1 , 2 , 3 , 4 , 5 ]
print ( list1[ len ( list1) // 2 ] )
2.已知一个数字列表,求所有元素和。
list2 = [ 11 , 22 , 33 , 44 , 55 ]
print ( sum ( list2) )
3.已知一个数字列表,输出所有奇数下标元素。
for i in range(len(list3)):
if list3[i] % 2:
print(i, end=', ')
print()
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
list4 = [ 12 , 23 , 34 , 45 , 56 , 67 , 78 , 89 ]
for i in list4:
if i % 2 :
print ( i, end= ', ' )
print ( )
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
list5 = [ 1 , 2 , 3 , 4 , 5 ]
for i in range ( len ( list5) ) :
list5[ i] *= 2
print ( list5)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
方法一:
names = [ '张三' , '李四' , '大黄' , '大黄' , '张三' , '张三' , '张三' ]
names1 = [ ]
for i in names:
if i not in names1:
names1. append( i)
names = names1
print ( names)
方法二:
names = [ '张三' , '李四' , '大黄' , '大黄' , '张三' , '张三' , '张三' ]
for _ in range ( len ( names) ) :
last_name = names. pop( )
if last_name not in names:
names. insert( 0 , last_name)
print ( names)
names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’, ‘李四’, ‘大黄’, ‘大黄’]
names = list(set(names))
print(names)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
list7 = [ 1 , 2 , 3 , 4 , 5 , 6 ]
if max ( list7) == min ( list7) :
count = 1
else :
count = 2
print ( ( sum ( list7) - max ( list7) - min ( list7) ) / ( len ( list7) - count) )
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
A = [ 1 , 'a' , 4 , 90 ]
B = [ 'a' , 8 , 'j' , 1 ]
C = [ ]
for i in A:
for j in B:
if i == j:
C. append( j)
print ( C)
9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
> 例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [ 19 , 89 , 90 , 600 , 1 ]
max_nums = nums[ 0 ]
for i in range ( len ( nums) ) :
if nums[ i] > max_nums:
max_nums = nums[ i]
else :
print ( max_nums)
10.*获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [ 3 , 1 , 3 , 1 , 4 , 2 , 1 , 3 , 7 , 3 , 3 ]
max_nums_count = nums. count( nums[ 0 ] )
count_nums = 0
for i in range ( len ( nums) ) :
if max_nums_count < nums. count( nums[ i] ) :
max_nums_count = nums. count( nums[ i] )
count_nums += 1
print ( nums[ count_nums] )