循环和列表
1.循环
1.1 for 循环
1)语法:
for 变量 in 序列:
循环体
2)说明:
说明 | |
---|---|
for | 关键字、固定写法 |
变量 | 变量名(已经定义过或者没有定义过的变量都可以) |
in | 关键字、固定写法 |
序列 | 任何容器型数据类型的数据,例如:字符串、列表、字典、元组、集合、迭代器、生成器、range等 |
: | 固定写法 |
循环体 | 结构上,和for保持一个缩进的一条或者多条语句(至少一条);逻辑上,循环体就是需要重复执行的代码 |
非容器型数据类型的变量:一个变量同时只能保存一个数据
容器型数据类型的变量:一个变量可以同时保存多个数据
3)执行过程
让变量依次去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体
for 循环循环次数由序列中元素的个数决定
for i in 'hello':
print(i, 100)
1.2 range 函数
for i in range(100):
print('========')
用法 | |
---|---|
range(N) | 产生[0,N)的等差数列,差是1;range(5) - 0、1、2、3、4 |
range(M, N) | 产生[M, N)的等差数列,差是1;range(5,10) - 5、6、7、8、9 |
range(M, N, step) | 产生[M, N)的等差数列,差是step;range(2,11,2) - 2、4、6、8、10 |
练习:利用range创建以下几个等差数列
# 0、1、2、3 … 55 - range(56)
# 10 ~ 99 - range(10,100)
# 1、3、5、7、9 - range(1, 10, 2)
# 11、22、33、44 - range(11, 45, 11)
# 9、8、7、6、5、4、3、2、1、0 - range(9, -1, -1)
# 10、8、6、4 - range(10, 3, -2)
1.3 while 循环
1)语法:
while 条件语句:
循环体
2)执行过程
不断判断条件是否为True,为True就执行循环体,知道条件语句的结果为False,整个循环结束
x = 0
while x < 5:
print(x, end = '')
x += 1 # 01234
1.4 for 循环和while 循环的选择
循环次数确定使用for 循环
循环次数不确定(程序员在写代码的时候无法通过任何方式来确定循环的次数)只能用while 循环
while 循环固定写法:
while True:
需要重复执行的操作
if 循环结束的条件:
break
案例:正确密码:123123,当输入错误时,一直提示请输入密码
pw = '123123'
while True:
value = input('请输入密码:')
if value == pw:
print('密码正确,登陆成功!')
break
else:
print('密码错误,请重新输入!')
2. 列表
2.1 认识列表
什么是列表?
1)系统类型,是容器型数据类型(同时保存多个数据);将[]作为容器的标志,里面多个元素
(容器中每个独立的数据)用逗号隔开: [数据1, 数据2, 数据3, 数据4,…]
2)列表是可变的(元素的个数和元素的值可变 - 支持增删改操作);列表是有序(支持索引操作、顺
序影响结果)
3)列表的元素:任何类型的数据都可以作为列表的元素
a. 列表有序
列表有序,所以顺序影响结果
print([1, 2, 3] == [3, 2, 1]) # False
集合无序,所以顺序不影响结果
print({1, 2, 3} == {3, 2, 1}) # True
b.列表的元素
list1 = [1, 3, 'er', True, '', None, {1, 4}]
print(list1) # [1, 3, 'er', True, '', None, {1, 4}]
c.空列表
list2 = []
print(list2) # []
2.2 获取元素
2.2.1 查单个
查单个元素 - 一次获取列表中的一个元素
1)语法:列表[索引] - 获取列表中指定索引对应的元素
2)
说明 | |
---|---|
列表 | 具体的一个列表或者保存列表的变量 |
[] | 固定写法 |
索引 | 又叫下标:索引指的是元素在有序序列中的位置信息;列表一旦确定了,那么列表中每个元素的索引就确定了;索引的确定方式:从前往后索引值从0开始不断加1;从后往前-1开始不断减1 |
注意:索引不能越界
nums = [82, 73, 95, 61, 99]
print(nums[0], nums[-2]) # 82 61
print([82, 73, 95, 61, 99][2]) # 95
print(nums[5]) # 报错:IndexError: list index out of range
练习:已知scores中保存的是一个班级所有学生的分数(分数已经按照从大小排好序)
scores = [99, 97, 95, 88, 80, 79, 73, 66, 62, 57, 40, 33]
# 问题1:打印最高分
print(scores[0])
# 问题2:打印最低分
print(scores[-1])
# 问题3:打印中位数(如果scores中分数的个数是偶数个,中位数打印2个)
if len(scores) % 2 == 1:
print(scores[len(scores) // 2])
else:
print(scores[len(scores) // 2 - 1], scores[len(scores) // 2])
# 99
# 33
# 79 73
2.2.2 切片
1)完整语法:
列表[开始下标:结束下标:步长]
说明 | |
---|---|
开始下标 | 确定从哪个位置开始 |
结束下标 | 确定结束的位置 |
步长 | 确定获取方向和取的时候的间隔 |
2)怎么确定切片的结果
第一步:看从开始下标到结束下标的方向和步长对应的方向是否一致(步长为正表示
从前往后取,步长为负表示从后往前取),如果不一致结果一定是空列表
第二步:确定有效范围(开始下标对应的元素取得到,结束下标对应的元素取不到)
第三步:按照步长的方向和绝对值来获取元素;方向:为正在有效范围内从前往后取,为负在有效范围内从后往前取;绝对值:绝对值为1,一个一个的取,绝对值为2,取一个跳一个再取一个,绝对值为3,取1个跳过2个再取1个,…
3)怎么写切片表达式获取到需要的数据
第一步:确定开始下标 - 直接将需要获取的第一个元素在原列表中的下标作为开始下标
第二步:确定结束下标 - 根据取到的第一个数据和最后一个数据来确定有效范围,根据结束下标取不到的原则确定结束下标位置
第三步:确定步长 - 根据获取数据的方向确定步长的正负,根据取的时候是否跳着取怎么跳的确定绝对值
练习1:
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '猫咪']
# ['泽拉斯', ' 无极剑圣', '芈月']
print(names[2:5])
# ['牛头', '狗头', '鳄鱼']
print(names[-4:-1])
# ['牛头', '狗头', '鳄鱼', '猫咪']
print(names[-4::])
# ['龙龟', '芈月', '无极剑圣']
print(names[-5:-8:-1])
# ['猫咪', '狗头']
print(names[-1:-4:-2])
练习2:
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '猫咪']
# ['小法', '泽拉斯', '无极剑圣']
print(names[1:4])
# ['光辉', '泽拉斯', '芈月']
print(names[0:5:2])
# ['无极剑圣', '狗头']
print(names[3::4])
# ['鳄鱼', '龙龟', '泽拉斯']
print(names[-2::-3])
4)切片的省略写法:
完整语法:列表[开始下标:结束下标:步长]
a.省略步长:列表[开始下标:结束下标] - 相当于步长为1
b.省略开始下标:列表[:结束下标:步长] - 如果步长为正从第一个元素开始;如果步长为负从最后一个元素开始
c.省略结束下标:列表[开始下标::步长] - 如果步长为正一直取到最后一个元素;如果步长为负一直取到第一个元素
案例:
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '猫咪']
# 省略步长
print(names[3:6:]) # ['无极剑圣', '芈月', '龙龟']
print(names[-1:-4]) # []
# 省略开始下标
print(names[:4:2]) # ['光辉', '泽拉斯']
print(names[:-4:-1]) # ['猫咪', '鳄鱼', '狗头']
print(names[:3]) # ['光辉', '小法', '泽拉斯']
# 省略结束下标
print(names[3::-1]) # ['无极剑圣', '泽拉斯', '小法', '光辉']
print(names[-3:]) # ['狗头', '鳄鱼', '猫咪']
print(names[::-3]) # ['猫咪', '牛头', '无极剑圣', '光辉']
2.2.3 遍历
方法1: - 直接获取元素
for 变量 in 列表:
循环体(变量就是元素)
方法2: - 先获取每个元素的下标,然后再根据下标获取元素
for 变量 in range(len(列表)):
循环体(变量是元素对应的下标)
案例:
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '猫咪']
for i in range(len(names)):
print(i, names[i])
练习:统计scores中不及格的人数
scores = [67, 89, 90, 99, 45, 61, 77, 23, 59, 78]
count = 0
for i in scores:
if i < 60:
count += 1
print(count) # 3