day6-循环和列表

循环和列表

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值