循环的else结构
1. else
1) Python完整的循环结构
for 变量 in 序列:
for 变量 in 序列:
循环体
else:
代码段
while 条件语句:
循环体
else:
代码段
注意:原来循环else的存在不影响循环的执行
当循环自然结束else后面的代码会执行,如果循环是因为遇到break而结束的else后面的代码不会执行。
练习:判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 5
for x in range(2, int(num)):
if num % x == 0:
print(num, '不是素数!')
break
else:
print(num, '是素数!')
认识列表
1. 什么是列表(list)
1) 列表是容器型数据类型(是序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3,…]
2) 特点:
列表是可变的(指的元素的个数、元素的值以及元素的顺序可以) - 支持增删改。
列表是有序的 - 支持下标(元素在序列中的位置信息)操作。
3) 元素
列表对元素没有要求 - 一个列表可以保存任何类型的数据;同一个列表可以保存不同类型的数据。
空列表
list1 = []
print(list1)
元素可以是任何类型的元素, 而且类型可以不一致
list2 = [10, 23.4, True, 'abc', [10, 20]]
print(list2)
列表是有序的
print([1, 2, 3] == [3, 1, 2]) # False (列表有序)
print({1, 2, 3} == {3, 1, 2}) # True (集合无序)
获取列表元素
1. 一次获取单个元素
语法:
列表[下标] - 获取列表中指定下标对应的元素
说明:
列表 - 可以是具体的一个列表值,也可以是保存列表的变量
[ ] - 固定写法
下标 - 又叫索引;下标是有序序列中元素的位置信息。
列表中的每个元素都有两组下标值,分别是从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
2) 下标不能越界
list2 = [10, 45, 60, 8]
print(list2[-2], list2[2]) # 60 60
2. 切片 - 一次获取多个元素
1) 切片的完整语法
语法:
列表[开始下标:结束下标:步长]
第一步: 是否能够取到数据:如果开始到结束的方向和步长对应的方向(步长为正方向是从前往后,为负就是从后往前)一致就可以获取到元素,反之切片结果一定是[ ]。
第二步:确定有效范围:[开始下标, 结束下标)。
第三步:在有效范围内按照步长去获取元素。
2) 切片语法参数的省略
a. 省略步长 - 相当于步长是1
列表[开始下标:结束下标] == 列表[开始下标:结束下标:1]
b. 省略开始下标 - 如果步长为正就从第一个元素开始;如果步长为负就从最后一个元素开始
列表[:结束下标:步长]
列表[:结束下标]
c. 省略结束下标 - 步长为正取到最后一个元素为止;步长为负取到第一个元素为止
列表[开始下标::步长]
列表[开始下标:]
d. 一起省
列表[::步长]
列表[:]
3. 遍历 - 一个一个取,取完
方法一:直接遍历列表,获取元素
for 元素 in 列表:
循环体
方法二:通过遍历获取每个元素的下标,然后再通过下标获取元素
for 下标 in range(len(列表)):
循环体
for 下标 in range(-1, -len(列表)-1, -1):
循环体
练习:
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. 增 - 添加元素
1) 列表.append(元素) - 在列表的最后添加指定元素。
2) 列表.insert(下标, 元素) - 在指定下标对应的元素前插入指定元素。
heroes = ['后裔', '鲁班7号', '曹操', '荆轲']
print(heroes) # ['后裔', '鲁班7号', '曹操', '荆轲']
heroes.append('王昭君')
print(heroes) # ['后裔', '鲁班7号', '曹操', '荆轲', '王昭君']
heroes.insert(2, '妲己')
print(heroes) # ['后裔', '鲁班7号', '妲己', '曹操', '荆轲', '王昭君']
2. 删 - 删除元素
1) del 列表[下标] - 删除列表中指定下标对应的元素(下标越界会报错)
2) 列表.remove(元素) - 删除列表中指定的元素(元素不存会报错;如果元素有多个,只删最前面的那一个)
3)
列表.pop() - 取出列表中最后一个元素,并且返回
列表.pop(下标) - 取出列表中指定下标对应的元素,并且返回
3.改 - 修改元素的值
列表[下标] = 值 - 将列表指定下标对应的元素修改成指定的值
names = ['小明', '张三', '李四']
print(names)
names[0] = '小花'
print(names) # ['小花', '张三', '李四']
练习: 将百分制成绩的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]