day5列表

列表

问题:定义变量保存20个学生的成绩

1) 不用列表:

s1 = 60
s2 = 98
s3 = 70
s4 = 89
s5 = 71
s6 = 93
# ...
print((s1 + s2 + s3 +...+s20) / 20)

2)用列表

scores = [60, 98, 70, 89, 71, 93, 99]
print('平均分:', sum(scores) / len(scores))
print('最高分:', max(scores))
scores.sort(reverse=True)
print(scores)

什么是列表(list)

  1. 列表是容器型数据类型(是序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3,…]
  2. 特点:
    列表是可变的(指的元素的个数、元素的值以及元素的顺序可以) - 支持增删改
    列表是有序的 - 支持下标(元素在序列中的位置信息)操作
  3. 元素
    列表对元素没有要求 - 一个列表可以保存任何类型的数据;同一个列表可以保存不同类型的数据

1)空列表

list1 = []
print(list1)

2)元素可以是任何类型的元素, 而且类型可以不一致

list2 = [10, 23.4, True, 'abc', [10, 20]]
print(list2)

3)列表是有序的

print([1, 2, 3] == [3, 1, 2])       # False (列表有序)
print({1, 2, 3} == {3, 1, 2})       # True  (集合无序)

获取列表元素

一次获取单个元素

语法:
列表[下标] - 获取列表中指定下标对应的元素

说明:
列表 - 可以是具体的一个列表值,也可以是保存列表的变量
[] - 固定写法
下标 - 又叫索引;下标是有序序列中元素的位置信息
列表中的每个元素都有两组下标值,分别是从0开始依次增加的下标(其中0表示第一个)和从-1开始依次减小的下标值(-1表示倒数第一个)
[‘小明’, ‘小花’, ‘小红’], '小明’的下标分别是0和-3, '小花’的下标是1和-2,'小红’的下标是2和-1

1)可以是具体的一个列表值,也可以是保存列表的变量

print([10, 20, 30][0])    # 10
list1 = [10, 20, 30]
print(list1[-1])         # 30
  1. 下标不能越界
list2 = [10, 45, 60, 8]
# print(list2[4])     # IndexError: list index out of range
# print(list2[-6])    # IndexError: list index out of range
print(list2[-2], list2[2])

练习:

已知一个列表中保存的6个英雄的名字
heroes = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
# a. 获取最后一个英雄的名字
print(heroes[-1])
# b. 获取第3个英雄的名字
print(heroes[2])
# c. 获取'张飞'这个元素
print(heroes[-3])
list3 = ['abc', 10, [1, 2, 3], True]
print(list3[2][-1])    # [1, 2, 3][-1]   -> 3

切片 - 一次获取多个元素

完整语法

语法:
列表[开始下标:结束下标:步长]

第一步: 是否能够取到数据:如果开始到结束的方向和步长对应的方向一致就可以获取到元素,否则取不到值,结果为[]

步长为正 - 从前往后取数
步长为负 - 从后往前取数

第二步:确定有效范围:[开始下标, 结束下标)

第三步:在有效范围内按照步长去获取元素

heroes = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
print(heroes[0:4:-1])       # []
print(heroes[1:-1:2])        # ['甄姬', '张飞']
print(heroes[-2:1:2])       # []
print(heroes[-1:0:-1])       # ['蔡文姬', '孙膑', '张飞', '艾琳', '甄姬']
print(heroes[-1:0:-2])       # ['蔡文姬', '张飞', '甄姬']

print(heroes[2:-1:1])     # ['艾琳', '张飞', '孙膑']
print(heroes[0:4:-2])     # []
print(heroes[-1:1:-3])      # ['蔡文姬', '艾琳']

# ['鲁班7号', '甄姬', '艾琳']
print(heroes[0:3:1])

# ['鲁班7号', '张飞']
print(heroes[0:-2:3])

# ['张飞', '艾琳', '甄姬']
print(heroes[-3:0:-1])

# ['孙膑', '艾琳']
print(heroes[-2:1:-2])
语法参数的省略

列表[开始下标:结束下标:步长]

a. 省略步长 - 相当于步长是1
列表[开始下标:结束下标] == 列表[开始下标:结束下标:1]

b. 省略开始下标

步长为正,从第一个元素开始往后取;

步长为负,从最后一个方向开始往前取.

列表[:结束下标:步长]
列表[:结束下标]

c. 省略结束下标

步长为正取到最后一个元素为止;步长为负取到第一个元素为止
列表[开始下标::步长]
列表[开始下标:]

d. 一起省
列表[::步长]
列表[:] - 获取或复制完整列表

heroes = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
# 省略步长
print(heroes[-1:2])     # []
print(heroes[2:-1])     # ['艾琳', '张飞', '孙膑']

# 省略开始下标
print(heroes[:-2:1])        # ['鲁班7号', '甄姬', '艾琳', '张飞']
print(heroes[:-2:-1])       # ['蔡文姬']
print(heroes[:3:2])         # ['鲁班7号', '艾琳']
print(heroes[:3:-2])        # ['蔡文姬']
print(heroes[:3])           # ['鲁班7号', '甄姬', '艾琳']

# 省略结束下标
heroes = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
print(heroes[1:])       # ['甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
print(heroes[-2::-2])    # ['孙膑', '艾琳', '鲁班7号']

print(heroes[::-1])     # ['蔡文姬', '孙膑', '张飞', '艾琳', '甄姬', '鲁班7号']
print(heroes[::-2])     # ['蔡文姬', '张飞', '甄姬']
print(heroes[::2])      # ['鲁班7号', '艾琳', '孙膑']
print(heroes[:])        # ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']

heroes = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
print(heroes[2::2])
print(heroes[:4])
print(heroes[::-3])
print(heroes[:-3:-2])

print(heroes[:])        # 拷贝列表
print(heroes[::-1])     # 列表倒序
print(heroes[1:-1])     # 去头去尾

str1 = 'helloPython'
print(str1[1:-1:2])     # 'elPto'
print(str1[1:-1])       # 'elloPytho'
遍历 - 一个一个取,取完

方法一:直接遍历列表,获取元素

for 元素 in 列表:
    循环体

方法二:通过遍历获取每个元素的下标,然后再通过下标获取元素

for 下标 in range(len(列表)):
    循环体
for 下标 in range(-1, -len(列表)-1, -1):
    循环体

例子:

list1 = [10, 20, 45, 9]
for x in list1:
    print('x:', x)

for x in range(len(list1)):
    print(x, list1[x])
heros = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
for x in range(len(heros)):
    print(x,heros[x])

heros = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
for x in range(-1, -len(heros) - 1, -1):
    print(x, heros[x])

练习:

scores = [56, 89, 90, 23, 78, 82, 99, 67]
# 1. 求总分数和平均分
total = 0
for x in scores:
    total += x
print('总分数:', total)
print('平均分:', total / len(scores))


# 2. 统计不及格学生的人数
count = 0
for x in scores:
    if x < 60:
        count += 1
print('不及格人数:', count)

# 3. 求最高分		每两个一起比较,取其中更高分
max1 = scores[0]    # 假设第一个分数最高(max1保存最高分)
for x in scores[1:]:
    if x > max1:
        max1 = x
print('最高分:', max1)

增删改

增 - 添加元素

1)列表.append(元素) - 在列表的最后添加指定元素
2)列表.insert(下标, 元素) - 在指定下标对应的元素前插入指定元素

heroes = ['后裔', '鲁班7号', '曹操', '荆轲']
print(heroes)       # ['后裔', '鲁班7号', '曹操', '荆轲']
heroes.append('王昭君')
print(heroes)       # ['后裔', '鲁班7号', '曹操', '荆轲', '王昭君']

heroes.insert(2, '妲己')
print(heroes)       # ['后裔', '鲁班7号', '妲己', '曹操', '荆轲', '王昭君']

删 - 删除元素

  1. del 列表[下标] - 删除列表中指定下标对应的元素(下标越界会报错)

    #语法和其他几个不同

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

  3. 列表.pop() - 取出列表中最后一个元素,并返回到变量(如果之前定义过)

列表.pop(下标) - 取出列表中指定下标对应的元素,并返回到变量(如果之前定义过)

heroes = ['后裔', '鲁班7号', '妲己', '曹操', '荆轲', '王昭君']
del heroes[-2]
print(heroes)       # ['后裔', '鲁班7号', '妲己', '曹操', '王昭君']

heroes.remove('妲己')
print(heroes)       # ['后裔', '鲁班7号', '曹操', '王昭君']

# heroes.remove('瑶')      # ValueError: list.remove(x): x not in list

heroes = ['后裔', '鲁班7号', '妲己', '曹操', '荆轲', '鲁班7号', '王昭君']
x = heroes.remove('鲁班7号')
print(heroes, x)       # ['后裔', '妲己', '曹操', '荆轲', '鲁班7号', '王昭君']  None

heroes = ['后裔', '鲁班7号', '妲己', '曹操', '荆轲', '鲁班7号', '王昭君']
x = heroes.pop()
print(heroes, x)       # ['后裔', '鲁班7号', '妲己', '曹操', '荆轲', '鲁班7号'] 王昭君

x = heroes.pop(2)
print(heroes, x)       # ['后裔', '鲁班7号', '曹操', '荆轲', '鲁班7号']   妲己

改 - 修改元素的值

列表[下标] = 值 - 将列表指定下标对应的元素修改成指定的值

names = ['小明', '张三', '李四']
print(names)
names[0] = '小花'
print(names)     # ['小花', '张三', '李四']

练习:

scores = [90, 180, 30, 67, -238, 89, 2, 34, 1928]
# 练习: 将百分制成绩的scores中所有不合理的分数全部修改成0
# [90, 180, 30, 67, -238, 89, 2, 34, 1928]  -> [90, 0, 30, 67, 0, 89, 2, 34, 0]
for index in range(len(scores)):
    s = scores[index]
    if s < 0 or s > 100:
        scores[index] = 0
print(scores)       # [90, 0, 30, 67, 0, 89, 2, 34, 0]
scores = [90, 180, 30, 67, -238]
for x in range(len(scores)):
    if not 0 < scores[x] <= 100:
        scores[x] = 0
print(scores)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值