1. 循环嵌套
- 1.1 概念:在一个循环体里嵌入另一个循环
- 外层循环可以控制高度
- 内层循环可以控制宽度
- 1.2 语法:
- 示例:
打印三角形
# 分析 # x 1 j < 1=0+1 0 = i # xx 2 j < 2=1+1 1 = i # xxx 3 j < 2=2+1 2 = i # xxxx 4 j < 4=3+1 3 = i # xxxxx 5 j < 5=4+1 4 = i # 外循环控制行号,内循环控制 'x'的个数 i = 0 while i < 5: j = 0 while j < i + 1: print('x',end='') j += 1 else: print() # print() 自带换行功能 i += 1 运行结果: x xx xxx xxxx xxxxx
- 示例:
2. break 和 continue
-
2.1 break 可以立即退出循环语句,包括退出else语句
- 示例:
i = 0 while i < 5: i += 1 if i == 3: break print(i, end = '\t') else: print(f"循环正常结束 i = {i}") if i != 5: print(f'break中断 i = {i}')
- 无break的循环运行结果:
- 有 break的循环运行结果:
-
2.2 continue 用来跳过当次循环
- 示例:
i = 0 while i < 5: i += 1 if i == 3: continue print(i, end = '\t') else: print(f"循环正常结束 i = {i}") if i != 5: print(f'break中断 i = {i}')
- 运行结果:
3. 列表
-
3.1 序列
- 概念:序列是python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
- 可变序列(序列中元素可以增删改): 列表list 字典dict
- 不可变序列(序列中的元素不可增删改) 字符串(str) 元组(tuple)
- 关于可变序列与不可变序列的含义,会在本文最后以列表和字符串举例说明
-
3.2 列表的快速入门
- 概念:
- 列表是python中的一个对象
列表是有序的
,可以保存多个数据- 列表可以存储任意类型的数据
- 列表创建: 通过[]来创建一个空列表
- 示例:
import operator l = [] # 创建一个空列表 print(type(l)) # 列表的有序性证明 l1 = [1,2,3,4,5] l2 = [5,1,2,3,4] print(operator.eq(l1,l2)) # 判断两个列表是否相等 # 列表中可存储任意类型的元素 l = ['python',1,3,True,None,[4,5,6]] print(len(l))
- 运行结果:
- 列表中可以通过索引index或下标来获取列表中的元素
- 索引(下标)从0开始 ,依次类推,列表中最后一个索引是
len(列表长度)-1 或 -1
- 概念:
-
3.3 切片
- 概念:
- 切片是指从现有的列表中获得一个子列表,但不改变原列表
- 语法:
- 列表[起始:结束:步长]
- 通过切片获取元素时,会包含起始位置的元素,不会包括结束位置的元素,
*类似数学中的左闭右开区间 例如:[1,3) 区间中包含1,2两个元素*
- 示例
hero = ['钢铁侠','葫芦娃','蜘蛛侠','黑寡妇','蚁人','美国队长'] print(hero) print(hero[0:3]) # 这里的 3 千万不能理解为切片三个元素,请参照下一行代码 print(hero[2:4]) # 这里的 4 应该是指切片的结束位置,初学者要注意这个坑
- 运行结果:
- 示例
- 起始位置和结束位置的索引可以不写
- 起始位置省略:会从索引为0的位置开始截取到结束的元素,但不包含结束的元素
l = ['a','b','c','d','e','f','g','h'] print(l[:3]) 运行结果: ['a', 'b', 'c']
- 结束位置省略:会从当前的开始位置一直截取到最后
l = ['a','b','c','d','e','f','g','h'] print(l[5:]) 运行结果: ['f', 'g', 'h']
- 省略开始和结束:会截取整个列表的所有元素
l = ['a','b','c','d','e','f','g','h'] print(l[:]) 运行结果: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
- 步长 默认为1 可以省略不写
l = ['a','b','c','d','e','f','g','h'] print(l[::2]) 运行结果: ['a', 'c', 'e', 'g'] ```
- 不能为0 但可以为负
l = ['a','b','c','d','e','f','g','h'] print(l[::-1]) 运行结果: ['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'] print(l[::0]) # 切片步长不能为0 运行结果: ValueError: slice step cannot be zero ```
- 概念:
-
3.4 通用操作
- + , *
- + 可以将两个列表拼接成一个列表
- * 可以将列表重复指定的次数(注意2个列表不能够做乘法,只能和整数做乘法运算)
- + 可以将两个列表拼接成一个列表
- in ,not in
- in 用来检查指定元素是否在列表当中
- not in 用来检查指定元素是否不在列表当中
- in 用来检查指定元素是否在列表当中
- len() 获取列表中元素的个数(重复元素也计算)
- max() 获取列表中的最大值
- min() 获取列表中的最小值
l = ['a','b','c','d','e','f','g','h'] print('l中的最大值 %s'%max(l)) print('l中的最小值 %s'%min(l)) 运行结果: l中的最大值 h l中的最小值 a
-
index()方法:获得指定元素在列表中第一次出现的位置(或索引),如果找不到,会报错
- 语法:list.index(x [, start][,end])
- 第一个参数 指定获取的元素名
- 第二个参数 表示查找的起始位置
- 第三个参数 表示查找的结束位置
- 示例:
hero = ['钢铁侠','葫芦娃','蜘蛛侠','葫芦娃','黑寡妇','蚁人','蜘蛛侠','美国队长'] print(hero) print(hero.index('葫芦娃')) # 指定一个参数 print(hero.index('葫芦娃',2)) # 指定两个参数 print(hero.index('葫芦娃',6,9)) # 指定三个参数
- 运行结果:
- 语法:list.index(x [, start][,end])
-
count() 统计指定元素在列表中出现的个数,找不到返回0个
hero = ['钢铁侠','葫芦娃','蜘蛛侠','葫芦娃','黑寡妇','蚁人','蜘蛛侠','美国队长'] print(hero) print('葫芦娃 %d 个'%hero.count('葫芦娃')) print('钢铁侠 %d 个'%hero.count('钢铁侠')) print('蜘蛛侠 %d 个'%hero.count('蜘蛛侠')) print('齐天大圣 %d 个'%hero.count('齐天大圣'))
- 运行结果:
- 运行结果:
- + , *
-
3.5 修改列表
- 索引:通过列表的索引修改指定的值
hero = ['钢铁侠','葫芦娃','蜘蛛侠','葫芦娃','黑寡妇','蚁人','蜘蛛侠','美国队长'] print(f'修改前{hero}') hero[1] = '齐天大圣' print(f'修改后{hero}')
- 运行结果:
- 运行结果:
- 切片:就是给切片的内容重新赋值,但是赋值的内容必须是一个序列
- 示例1
print(f'修改前{hero}') hero[0:3] = '我是谁' print(f'修改后{hero}')
- 运行结果:
- 示例2:
print(f'修改前{hero}') hero[0:3] = 123 # 123 不是一个序列,会出错 print(f'修改后{hero}')
- 运行结果:
- 示例3:
# 如果替换的元素大于原有的元素,多余的元素会往后顺延 print(f'修改前{hero}') hero[0:3] = ['青龙','白虎','朱雀','玄武','齐天大圣'] print(f'修改后{hero}')
- 运行结果:
- 示例4:
# 向列表开头插入元素 print(f'修改前{hero}') hero[0:0] = ['青龙'] print(f'修改后{hero}')
- 运行结果:
- 当切片时设置了步长时,序列中的元素的个数必须和切片中元素的个数保持一致
- 示例1:
print(f'修改前{hero}') print(hero[::2]) hero[::2] = ['齐天大圣'] # 元素个数为1 print(f'修改后{hero}')
- 运行结果:
- 示例2:
print(f'修改前{hero}') print(hero[::2]) hero[::2] = ['青龙','白虎','朱雀','玄武'] print(f'修改后{hero}')
- 运行结果:
- 删除列表中的内容
-
方法一:通过索引删除
print(f'修改前{hero}') del hero[2] print(f'修改后{hero}')
-
运行结果:
-
方法二: 切片删除
print(f'修改前{hero}') #del hero[0:2] # 切片删除1 hero[0:2] = [] # 切片删除2 print(f'修改后{hero}')
- 运行结果:
- 运行结果:
-
- 由上可知,列表元素能进行增、删、改,因此
列表是可变序列
字符串是不可变序列
- 索引:通过列表的索引修改指定的值