Day5 - 列表

一、循环的else结构
# 1. else
"""
1)Python完整的循环结构
for 变量 in 序列:
    循环体
else:
    代码段
    
while 条件语句:
    循环体
else:
    代码段

注意:循环else的存在不影响原来循环的执行
当循环自然结束else后面的代码会执行,如果循环是因为遇到break而结束的else后面的代码不会执行
"""

for x in range(3):
    print('hello world!')
    if x == 1:
        break
else:
    print('你好,世界!')			# 不会打印

# 练习1:判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 50
for x in range(2, int(num**0.5) + 1):
    if num % x == 0:
        print(num, '不是素数!')
        break
else:
    print(num, '是素数!')

x = 2
while 2 <= x <= int(num**0.5):
    x += 1
    if num % x == 0:
        print(num, '不是素数!')
        break
else:
    print(num, '是素数!')

二、认识列表list
# 问题:定义变量保存20个学生的成绩
# 1)不用列表
# s1 = 60
# s2 = 98
# s3 = 70
# s4 = 89
# s5 = 71
# s6 = 93
# # ...
# print((s1 + s2 + s3 +...+s20) / 20)

# 2)用列表
scores = [98, 88, 75, 65, 95]
print('平均分:', sum(scores) / len(scores))
print('最高分:', max(scores))
scores.sort(reverse=True)
print(scores)
1. 什么是列表(list)
"""
1)列表是容器型数据类型(是序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, ...]
2)特点:
列表是可变的(指的是元素的个数、元素的值、元素的顺序可变) -- 支持增删改
列表是有序的 -- 支持下标(元素在序列中的位置信息)操作
3)元素:列表对元素没有要求 -- 一个列表可以保存任何类型的数据;同一个列表可以保存不同类型的数据

"""
# 1)空列表
list1 = []
print(list1)

if list1:
    print('===')			# 不会打印'==='

# 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, 2, 1})           # True(集合无序)

list3 = [None, 55, False, 1+1]
print(list3)				# 会打印[None, 55, False, 2]
三、获取列表元素
1. 获取单个元素
"""
语法:
列表[下标] -- 获取列表中指定下标对应的元素

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

# a = [10, 20, 30]
# a[下标]

# 1)可以说具体的一个列表值,也可以是保存列表的变量
print([10, 20, 30][0])          # 10

list1 = [10, 20, 30]
print(list1[-1])                # 30

# 2)下标不能越界
list2 = [10, 20, 30, 5]             # 下标有效范围:[0,3]和[-1,-4]
# print(list2[4])         # IndexError: list index out of range
print(list2[2], list2[-2])				 # 30 30

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

list3 = ['abc', 10, [1, 2, 3], True]
print(list3[2][-1])             # [1, 2, 3][-1] -> 3
2. 切片 —— 一次获取多个元素
# 1)切片的完整语法
"""
语法:
列表[开始下标:结束下标:步长]

第一步:是否能够取到数据:如果开始到结束的方向和步长对应的方向(步长为正方向是从前往后,为负是从后往前)一致就可以取到元素,反之切片结果一定为空
第二步:确定有效范围:[开始下标, 结束下标]
第三步:在有效范围内按步长去获取元素
"""
heroes = ['鲁班7号', '甄姬', '艾琳', '张飞', '孙膑', '蔡文姬']
print(heroes[0:4:1])
print(heroes[0:4:-1])             # [] -- 步长和开始结束下标方向不一致
print(heroes[1:-1:2])
print(heroes[-2:1:2])             # []
print(heroes[0:4:2])
print(heroes[-1:0:-2])

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

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

# 2)切片语法参数的省略
"""
列表[开始下标:结束下标:步长]

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

b. 省略开始下标 -- 如果步长为正就从第一个元素开始;如果步长为负就从最后一个元素开始
列表[:结束下标:步长]
列表[:结束下标]               # 开始下标和步长一起省略

c. 省略结束下标 -- 步长为正取到最后一个元素为止;步长为负取到第一个元素为止
列表[开始下标::步长]
列表[开始下标:]               # 结束下标和步长一起省略

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

# 省略开始下标
print(heroes[:-2:1])

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

# 省略结束下标
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])     # 去头去尾
3. 遍历 —— 一个一个取,取完
"""
方法一:直接遍历列表,获取元素
for 元素 in 列表:
    循环体
    
方法二:通过遍历获取每个元素的下标,然后再通过下标获取元素
for 下标 in range(len(列表)):               # len(列表) -- 获取列表长度
    循环体

for 下标 in range(-1, -len(列表)-1, -1):
    循环体
"""
list1 = [10, 20, 5, 60]
for x in list1:
    print('x:', x)

for x in range(len(list1)):
    print(x, list1[x])

for x in range(-1, -len(list1)-1, -1):
    print(x, list1[x])

# 练习
scores = [56, 89, 90, 23, 78, 82, 99, 67]
print(len(scores))
# 1. 求总分数和平均分
sum_scores = 0
for x in scores:
    sum_scores += x
print('学生总分数:', sum_scores)
print('学生平均分:', sum_scores/len(scores))
# 2. 统计不及格学生的人数
numbers = 0
for x in scores:
    if x < 60:
        numbers += 1
print('不及格学生人数:', numbers)
# 3. 求最高分
scores_max = scores[0]          # 假设第一个分数最高(scores_max保存最高分)
for x in scores[1:]:
    if scores_max < x:
        scores_max = x
print('最高分:', scores_max)
四、增删改操作
1. 增 ———— 添加元素
"""
1)列表.append(元素) -- 在列表的最后添加指定元素
2)列表.insert(下标, 元素) -- 在指定下标对应的元素前插入指定元素
"""
heroes = ['亚索', '剑魔', '加里奥']
print(heroes)               # ['亚索', '剑魔', '加里奥']
heroes.append('瑞兹')
print(heroes)               # ['亚索', '剑魔', '加里奥', '瑞兹']
heroes.insert(2, '皇子')
print(heroes)               # ['亚索', '剑魔', '皇子', '加里奥', '瑞兹']
heroes.insert(-1, '瑟提')
print(heroes)               # ['亚索', '剑魔', '皇子', '加里奥', '瑟提', '瑞兹']
2. 删 ———— 删除元素
"""
1)del 列表[下标] -- 删除列表中指定下标对应的元素
2)列表.remove(元素) -- 删除列表中指定的元素(元素不存会报错;如果元素有多个,只删前面的那一个)
3)
列表.pop() -- 取出列表中最后一个元素,并且返回
列表.pop(下标) -- 取出列表中指定下标对应的元素,并且返回
"""
heroes = ['亚索', '剑魔', '皇子', '加里奥', '瑟提', '瑞兹']
del heroes[-2]
print(heroes)               # ['亚索', '剑魔', '皇子', '加里奥', '瑞兹']

heroes.remove('皇子')
print(heroes)               # ['亚索', '剑魔', '加里奥', '瑞兹']

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

heroes = ['亚索', '剑魔', '皇子', '加里奥', '瑟提', '瑞兹', '皇子']
heroes.remove('皇子')
print(heroes)           # ['亚索', '剑魔', '加里奥', '瑟提', '瑞兹', '皇子']

x = heroes.pop()
print(heroes, x)        # ['亚索', '剑魔', '加里奥', '瑟提', '瑞兹'] 皇子


x = heroes.pop(2)
print(heroes, x)        # ['亚索', '剑魔', '瑟提', '瑞兹'] 加里奥
3. 改 ———— 修改元素的值
"""
列表[下标] = 值 -- 将列表指定下标对应的元素修改成指定的值
"""
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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值