第七讲 列表
1.循环嵌套
在python语言中,可以在一个循环体里嵌入另一个循环。
while 条件表达式1:
循环体1
while 条件表达式2:
循环体2
......
列题:
①.输出矩形:
*****
*****
*****
*****
*****
代码:
i = 0 # 初始化变量i
while i < 5: # 控制高度,从第1行开始输出,最多5行
j = 0 # 初始化变量j
while j < 5: # 控制宽度,从第1列开始输出,最多5列
print('*', end=' ') # 输出 *
j += 1 # 更新变量
print() # 换行
i += 1 # 更新变量
注:end=’ ‘的作用:print()在输出后会自动换行,为了不让print()自动换行,可以在后面加上end=’ '语句。
print( )的作用:上文提到,print()会自动换行,因此可以利用这个特性,在内循环结束后输入print()实现换行的作用。
执行结果:
②.输出三角形:
*
**
***
****
*****
代码:
i = 0 # 初始化变量i
while i < 5: # 控制高度
j = 0 # 初始化变量j
while j <= i: # 控制宽度
print('*', end=' ') # 输出 *
j += 1 # 更新变量
print() # 换行
i += 1 # 更新变量
注:与上一个列题的代码的区别是内循环的条件语句不同
执行结果:
③.输出倒三角形:
*****
****
***
**
*
代码:
i = 0 # 初始化变量i
while i < 5: # 控制高度
j = 0 # 初始化变量j
while j < 5 - i: # 控制宽度
print('*', end=' ') # 输出 *
j += 1 # 更新变量
print() # 换行
i += 1 # 更新变量
执行结果:
④.输出99乘法表:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
代码:
i = 1 # 初始化变量i,i作为被乘数
while i <= 9: # 外循环
j = 1 # 初始化变量j,j作为乘数
while j <= i: # 内循环
print(f'{j} * {i} = {j * i} ', end=' ') # 格式化字符串,输出当前的j * i = j*i
j += 1 # 更新乘数
print() # 换行
i += 1 # 更新被乘数
注:与例题②相似,使用两层嵌套循环,外循环控制行,内循环控制当前行的一列。输出顺序由上往下,从左往右。每完成一行的输出就用print()换行。
执行结果:
2.continue和break
通常情况下,循环只有在不满足条件的时候,才会跳出循环。但我们也可以用break或continue语句,让循环在即使满足条件的情况下也可以跳出循环。
2.1 continue
contiune语句可以跳过本次循环,但不会结束循环,在满足条件的情况下循环会继续进行。
例:
i = 0
while i < 6:
i += 1
if i == 2: # 若i=2,则执行以下代码块
continue # 跳出当次循环
print(i, end=' ') # 输出i
else:
print('输出完毕')
该代码会循环6次,每一次循环都会输出一次i的值,i的值也会随着每次循环自加1,但当i=2时,会执行contiune语句,跳出当次循环,因此不会输出2。然后循环不会结束,在满足条件的情况下循环继续进行,直到 i = 6
执行结果:
2.2 break
break与continue相似,但break会直接结束整个循环。
例:
i = 0
while i < 6:
i += 1
if i == 2: # 若i=2,则执行该代码块
break # 结束循环
print(i, end=' ') # 输出i
else:
print('输出完毕')
在当i=2的时候,会执行break语句,结束循环,同时,因为else语句也是循环的一部分,所以在break语句执行后,也不会输出 ‘输出完毕’ 这行字
执行结果:
3.序列
3.1 概念
序列是python中的一种基本的数据结构。可以保存一组有序的数据,每个数据在序列中都有唯一的位置(索引),并且序列中的数据会按照添加的顺序分配索引。
3.2 序列的分类
序列分为:
- 可变序列(如:列表,字典等)
- 不可变序列(如:字符串)
问:为什么字符串是不可变序列?
答:用取索引的方法可以判断。如下:
a = 'hello'
,已知a变量是一个字符串变量,如果我们需要改变’hello’的值,用取索引的方法会报错。
我们用取索引的方法,想将a[0]位置的值改为’a’,结果报错:TypeError: ‘str’ object does not support item assignment
翻译:字符串是不可变对象
4.列表
列表是一种可变序列,可以通过索引获取和修改当中的元素。type = list
语法:
变量名 = [元素1,元素2,......,元素n]
列表可以保存多种类型的数据,如:
注:列表也可以保存变量,但是变量需要先指向,否则会报错。
错误:NameError: name ‘a’ is not defined
翻译:名称错误:未定义名称“a”
我们也可以创建一个空列表。
lst = []
4.1 通过索引(index)获取元素
索引是从0开始的,列表第一个位置为0,第二个位置为1,以此类推。
但是,如果取索引大于当前列表的长度的话会报错。
IndexError: list index out of range
索引器错误:列表索引超出范围
因此,我们可以通过len()函数获取列表的长度。
语法:
len(列表名) #返回值为int
注:以 lst = [10, 20, 30, 40, 50, 60] 为例,如果索引取负数,则会从后往前取。如:
5.切片
概念:切片指从现有列表中,获取一个子列表。
语法:
列表名 [起始:结束]
我们以:heros = ['钢铁侠', '蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼','美国队长']
为例。
- 例:取 ‘钢铁侠’ 到 ‘绿巨人’
代码:
heros = ['钢铁侠', '蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼']
print(heros [0:3])
执行结果:
注:切片所取的索引值是左闭右开的,即会包括起始位置,但不包括结束位置元素。
问:起始位置和结束位置可不可以不写。
-
如果省略结束位置:
如果省略结束位置,则从当前起始位置截取到列表最后一位。 -
如果省略起始位置:
如果省略起始位置,则从列表第一个元素截取到结束位置,但不包括结束位置的元素(左闭右开) -
如果起始位置和结束位置都不写:
如果都不写,则从列表第一位截取到最后一位
步长:
我们在列表切片的时候,可以增加步长,步长可以省略。
概念:步长表示每次获取元素的间隔。切片时,如果省略步长,则步长默认为 1
语法:
列表名 [起始:结束:步长]
-
如果步长为 2:
结论:步长为2,则隔1个取1个;步长为3,则隔2个取一个;以此类推,步长为n,则隔n-1个取一个。 -
如果步长为 -1:
-
如果步长为 -2:
结论:步长可以为负数。如果步长为-1,则将列表的顺序颠倒,然后隔0个取1个;步长为-2,则将列表顺序颠倒,然后隔1个取1个;以此类推,步长为-n,则顺序颠倒,隔n-1个取1个
注:步长不能为0,否则报错
错误源码:ValueError: slice step cannot be zero
值错误:步长不能为0