第6天 列表

第6天 列表

1.什么是列表(list)


"""
列表是容器型数据类型;将[]作为容器标志,里面多个元素用逗号隔开: [元素1, 元素2, 元素3, ...]
列表是可变的(可变指的是元素的个数、值和顺序可变 - 支持增删改);列表有序(支持下标操作)
列表中元素:任何类型的数据都可以作为列表的元素。(没有要求)

元素 - 指的是容器中每一个独立的数据
"""
# 空列表
list1 = []
print(list1)

# list2是一个列表,列表中只有一个元素
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])


# -1,-2,-3,-4,-5
for x in range(-1, -len(nums)-1, -1):
    print(x, nums[x])


# 4,3,2,1,0

# 练习1:scores保存所有学生的分数
# 1)统计不及格学生人数
# 2)计算学生平均分
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))


# 练习2:已知列表nums,统计nums中整数的个数
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(下标, 元素)     -   将元素插入到指定下标前
"""
# 1) append示例
list1 = [10, 20]
print(list1)

list1.append(100)
print(list1)        # [10, 20, 100]

# 练习:scores保存多个学生的分数,提取所有分数中不及格的分数
scores = [90, 78, 65, 45, 55, 89, 30, 99]   # -> [45, 55, 30]
new_scores = []
for x in scores:
    if x < 60:
        new_scores.append(x)
print(new_scores)


# 2)insert示例
# 列表.insert(下标, 元素)     -   将元素插入到指定下标前
nums = [10, 20, 30, 40]
print(nums)   # [10, 20, 30, 40]

nums.insert(1, 100)
print(nums)     # [10, 100, 20, 30, 40]

# 练习:已知一个列表,列表中的元素已经从小到大排好序,插入输入的数据,要求插入后不影响顺序
nums = [12, 23, 56, 78, 99, 120]
# 80   -> [12, 23, 56, 78, 80, 99, 120]
# 2    ->  [2, 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('三国')      # 报错:ValueError: list.remove(x): x not in list

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 操作

# 1. in
# 元素 in 列表    -  判断列表中是否存在指定的元素
# 元素 not in 列表   -  判断列表中是否不存在指定元素
print(10 in [10, 20, 30])       # True

print([10, 20] in [10, 20, 30])     # False

print([10, 20] in [[10, 20], 30])       # True

5总结–增删改查+in操作

### 查
列表[下标]    -   获取指定下标对应的元素
语法1: 完整的语法
列表[开始下标:结束下标:步长]

语法2:省略步长
列表[开始下标:结束下标]  - 步长为1

语法3:省略开始下标
列表[:结束下标:步长] / 列表[:结束下标]   -  如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个元素开始往前取


语法4:省略结束下标
列表[开始下标::步长] / 列表[开始下标:]
如果步长为正,从开始下标开始从前往后取取完为止;如果步长为负,从开始下标开始从后往前取取完

方法一 - 直接获取元素
for 变量 in 列表:
    循环体

变量依次获取的就是列表中的每个元素

方法二 - 通过获取每个元素的下标来获取元素
for 变量 in range(列表长度):
    循环体

变量依次获取的时候列表中元素的下标

补充:len(列表) - 获取列表的长度

### 2.增
1)列表.append(元素)   -  将元素添加到列表的最后
2)列表.insert(下标, 元素)     -   将元素插入到指定下标前
### 3.删
del 列表[下标]       -   删除指定下标对应的元素

列表.remove(元素)  -  删除指定元素
如果元素不存在会报错;如果元素有多个,只删最前面那一个

列表.pop()        -       取出最后一个元素,并且返回
列表.pop(下标)     -       取出指定下标对应的元素,并且返回

### 4. in
元素 in 列表    -  判断列表中是否存在指定的元素
元素 not in 列表   -  判断列表中是否不存在指定元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值