一、list列表
1.概述:
通过前两天的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班级有20个人,现在求班级的平均年龄。
若按照之前的方式来解决
age1 = 10
age2 = 12
...
age20 = 12
average = (age1 + age2 +...+age20)/20
在这里,很显然这种方法显得很麻烦,而python提供了一种解决方案,就是使用列表
本质:list列表的本质是一种有序的集合
2.创建列表
语法: 列表名 = [元素1,元素2,元素3…说明:列表中的选项被称为元素,跟string类似,下标也是从0开始计数
使用:创建列表
#创建空列表
list1 = []
#创建带有元素的列表
list2 = [10, 20, 30, 10]
print(list2)
在列表中元素的数据类型可以不同(灵活性)
list3 = [33, "good", True, 10.32]
print(list3)
3.列表元素的访问
3.1 列表的取值
功能:访问list列表中元素值
语法:列表名[索引]
list4 = [22, 33, 12, 32, 45]
#下标从0开始,最大值为len(list4)-1
print(list4[0])
注意:当索引值大于len(list4)-1的时候,会出现以下错误:
print(list4[5])
IndexError: list index out of range
这个错误就是下标越界【下标超出了可表示的范围】
3.2 列表元素的替换
功能:更改列表元素的值
语法:列表名[下标] = 值
list4 = [22, 33, 12, 32, 45]
list4[0] = "hello"
print(list4[0])
4.列表操作
4.1 列表组合
语法: 列表3 = 列表1 + 列表2
list1 = [1, 2, 3]
list2 = ['hello', 'yes', 'no']
list3 = list1 + list2
print(list3)
4.2 列表重复
语法: 列表2 = 列表1 * n
list1 = [1, 2, 3]
list2 = list1 * n
print(list2)
4.3 判断元素是否在列表中
语法:元素 in 列表
若存在则返回True,否则返回False
list1 = [1, 2, 3]
print(1 in list1)
4.4 列表截取
语法:列表[start: end] 表示获取从开始下标到结束下标的所有元素[start, end)
list1 = [1, 2, 3, 'hello', 'yes', 'no']
print(list1[2:4])
#若不指定start,则默认从0开始截取,截取到指定位置
#若不指定end,则从指定位置开始截取,截取到末尾结束
4.5 二维列表
语法:列表 =[列表1,列表2,列表3,… ,列表n]
#创建二维列表,即列表中的元素还是列表
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]
4.5 二维列表取值
语法:列表名【下标1][下标2]
注意:下标1代表第n个列表(下标从0开始),下标2代表第n个列表中的第n个元素
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]
print(list1[0][0])
5.列表的方法
5.1 list.append(元素/列表)
功能:在列表中末尾添加新的元素【在原本的列表中追加元素】
注意:append()中的值可以是列表也可以是普通元素
>>> list1 = [3, 4, 6]
>>> list1.append(6)
>>> print(list1)
[3, 4, 6, 6]
5.2 list.extend(列表)
功能:在列表的末尾一次性追加另外一个列表中的多个值
注意:extend()中的值只能是列表/元组[一个可迭代对象],不能是元素
>>> list1 = [1,2,3]
>>> list2 = [3, 4,5]
>>> list1.extend(list2)
>>> print(list1)
[1, 2, 3, 3, 4, 5]
5.3 list.insert(下标值, 元素/列表)
功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延
注意:插入的数据可以是元素也可以为列表
>>> list1 = [1,2,3]
>>> list1.insert(1,0)
>>> print(list1)
[1, 0, 2, 3]
>>> list1.insert(1,[2, 4, 8])
>>> print(list1)
[1, [2, 4, 8], 0, 2, 3]
5.4 list.pop(下标值)
功能:移除列表中指定下标处的元素(默认移除最后一个元素),并返回移除的数据
>>> list1 = [1, [2, 4, 8], 0, 2, 3]
>>> list1.pop()
3
>>> print(list1)
[1, [2, 4, 8], 0, 2]
>>> list1.pop(2)
0
>>> print(list1)
[1, [2, 4, 8], 2]
5.5 list.remove(元素)
功能:移除列表中的某个元素第一个匹配结果
>>> list1 = [1, 2, 3]
>>> list1.remove(2)
>>> print(list1)
[1, 3]
5.6 list.clear()
功能:清除列表中所有的数据
>>> list1 = [1, 2, 3]
>>> list1.clear()
>>> print(list1)
[]
5.7 list.index(下标值[, start】[, stop])
功能:从指定的范围的列表中找出某个值第一匹配的索引值
若不指定范围,则默认是整个列表。
>>> list1 = [1, 2, 3]
>>> list1.index(2)
1
>>> list1.index(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 4 is not in list
注意:若在列表中找不到这个元素,则会报错。
5.8 list.count(元素)
功能:查看元素在列表中出现的次数
>>> list1 = [1, 2, 3, 1]
>>> list1.count(1)
2
5.9 len(list)
功能: 获取元素列表个数
>>> list1 = [1, 2, 3, 1]
>>> len(list1)
4
5.10 max(list)
语法:获取列表中的最大值
>>> list1 = [1, 2, 3, 1]
>>> max(list1)
3
5.11 min(list)
语法:获取列表中的最小值
>>> list1 = [1, 2, 3, 1]
>>> min(list1)
1
5.12 list.reverse()
语法: 列表倒叙
>>> list1 = [1, 2, 3, 1]
>>> list1.reverse()
>>> print(list1)
[1, 3, 2, 1]
5.13 list.sort()
语法:列表排序 默认升序
>>> list1 = [1, 2, 3, 1]
>>> list1.sort()
>>> print(list1)
[1, 1, 2, 3]
5.14 浅拷贝
语法:list1 = [1, 2, 3]
list2 = list1
>>> list1 = [1, 2, 3, 1]
>>> list2 = list1
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list1))
4314476424
>>> print(id(list2))
4314476424
注意:浅拷贝为引用拷贝,类似于快捷方式
5.15 深拷贝
语法:list1 = [1, 2, 3]
list2 = list1.copy()
>>> list1 = [1, 2, 3, 1]
>>> list2 = list1.copy()
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list2))
4314525320
>>> print(id(list1))
4314524808
注意:深拷贝为内存拷贝,开辟了新的内存空间
5.16 list(元组)
功能:将元组转为列表
>>> list1 = list((1, 2, 3, 4))
>>> print(list1)
[1, 2, 3, 4]
6.列表的遍历
6.1 使用for循环遍历列表
语法:
for 变量名 in 列表 :
语句
功能:for循环主要用于遍历列表
遍历:指的是依次访问列表中的每一个元素,获取每个下标对应的元素值
说明:按照顺序获取列表中的每个元素,赋值给变量名,再执行语句,如此循环往复,直到取完列表中所有的元素为止
>>> list1 = ['hello', 78, '你好', 'good']
>>> for item in list1:
... print(item)
...
hello
78
你好
good
6.2 使用while循环遍历列表[使用下标循环]
语法:
下标 = 0
while 下标 < 列表的长度:
语句
下标 += 1
>>> list1 = ['hello', 78, '你好', 'good']
>>> index = 0
>>> while index < len(list1):
... print(list1[index])
... index += 1
...
hello
78
你好
good
6.3 同时遍历下标与元素
语法:
for 下标,变量 in enumerate(列表)
语句
>>> list1 = ['hello', 78, '你好', 'good']
>>> for index,item in enumerate(list1):
... print(index, item)
...
0 hello
1 78
2 你好
3 good
enumerate()[枚举]函数用于一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引序列,同时列出数据与数据下标,一般使用在for循环中
enumerate(obj, [start =0])
obj:一个可迭代对象
start:下标起始位置
练习:
1.对一个列表进行冒泡排序
2.删除列表中的重复元素
3.实现字符串翻转比如:hello => oleo
二、turtle模块绘图
1.turtle的使用
turtle是一个简单的绘图工具,他提供了一个小海龟,你也可以把它理解成一个小机器人
只听得懂有限的指令。
使用时候需要导入turtle库: import turtle
绘图窗口的原点(0,0)在正中间
默认情况下,海龟向正右方移动
2.操作命令
import turtle
#程序继续执行,也就是代码不执行完毕但不关闭窗口
turtle.done()
2.1 运动命令
turtle.forward(d) :向前移动d个长度
turtle.backward(d):向后移动d个长度
turtle.right(d) : 向右转动多少度
turtle.left(d) :向左转动多少度
turtle.goto(x, y) :移动到坐标为(x,y)的位置
turtle.speed(speed) :画笔绘制的速度[0, 10]
2.2 笔画控制命令
turtle.up() :笔画抬起,在移动的时候不会绘图【只移动画笔】
turtle.down() :画笔落下,移动绘图
turtle.setheading(d):改变画笔的朝向,多少度
turtle.pensize(d):改变画笔的粗细
turtle.pencolor(color):改变画笔的颜色
turtle.reset():恢复所有设置,清空窗口,重置turtle状态
turtle.clear():清空窗口
2.3 绘制图形
turtle.circle(r, steps = n) :默认绘制一个圆形,r为半径,n等于几就是几边行
turtle.begin_fill():开始填充
turtle.fillcolor(color) :填充颜色
turtle.end_fill() :结束填充
2.4 其他命令
turtle.done() :程序继续执行
turtle.undo() :撤销上一次动作
turtle.hideturtle() :隐藏小海龟
turtle.showturtle():显示小海龟
turtle.screensize(x, y) 设置窗口大小
三、tuple元组
1.概述
本质上是一种有序的集合,和列表非常的相似,列表使用[]表示,元组使用()表示
特点:一旦初始化,就不能发生改变
2.元组的创建
格式:
元组名 = (元素1, 元素2 ,元素3,…)
#创建空的元组
tuple1 = ()
print(tuple1)
#创建带有元素的元组
tuple2 =(22, 33, 14, 109)
print(tuple2)
#与列表类似,元组中的元素类型可以不同
tuple3 = (23,True,"good")
print(tuple3)
#定义只有一个元素的元组
tuple4 = (1) #这定义的不是元组而是整数1
tuple4 = (1,) #定义一个元素的元组定义时必须加一个逗号",",用来消除歧义
3.元组元素的访问
3.1 访问元组中的元素:
格式: 元组名[下标]
tuple1 = (20, 40, 201, 401)
print(tuple1[0])
#注意使用下标取值的时候,要注意下标的取值范围,不要下标越界
#获取最后一个元素
print(tuple1[-1])
3.2 修改元组
在元组定义的时候大家都知道元组一旦初始化就不能改变,但是现在如果我想改变元组怎么办呢?
元组是不能修改的,但是列表可以,元组中的元素的数据类型可以是不同类型的,因此我们可以通过在元组中添加一个列表,而列表是可以修改的,进而来”修改“我们的元组
tuple1 = ('hello', 'you',[20, 30])
#修改元组
tuple1[0] = 'hi'
#报错,元组不能修改
tuple1[2][1] = 'good'
注意:从表面上看我们的元组确实是改变了,但其实改变的不是我们的元组,而是list的元素,所谓的tuple不变是说,tuple的每个元素的指向永远不变,一旦它指向了这个list,就不能改指向其他的对象,但是指向的list本身是可变的!
3.3 删除元组
元组是不可变的,但是我们可以使用del语句删除整个元组
tuple1 = ('hello', 'hi')
del tuple1
print(tuple1)
#此时会报错
4.元组操作
4.1 元组连接组合
语法:
元组1 元组2
元组3 = 元组1 + 元组2
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
print(tuple1 + tuple2)
#结果
(1, 2, 3, 4, 5, 6)
注意:元素连接组合并没有改变原来的元组,而是生成了一个新的元组。
4.2 元组重复
语法:
元组2 = 元组1 * n
tuple1 = (1, 2, 3)
tuple2 = tuple1 * 3
print(tuple2)
#结果
(1, 2, 3, 1, 2, 3, 1, 2, 3)
4.3 判断元素是否在元组中
语法:
元素 in 元组
若存在则返回True,否则返回False
tuple1 = (1, 2, 3)
print( 1 in tuple1)
#结果
True
tuple1 = (1, 2, 3)
print( 5 in tuple1)
#结果
False
4.4 元组的截取
语法:
元组名[start:end]
截取的元组范围[start,end)
功能:获取开始下标到结束下标之前的所有元素。
若不指定start则默认是从开头开始截取到指定位置
若不指定end则默认从指定位置截取到结尾
tuple1 = (1, 2, 3, 8, 'hello', 'good')
tuple2 = tuple1[2:5]
print(tuple2)
#结果
(3, 8, 'hello')
tuple1 = (1, 2, 3, 8, 'hello', 'good')
tuple2 = tuple1[:5]
print(tuple2)
#结果
(1, 2, 3, 8, 'hello')
tuple1 = (1, 2, 3, 8, 'hello', 'good')
tuple2 = tuple1[3:]
print(tuple2)
#结果
(8, 'hello', 'good')
5.元组的方法
5.1 len(tuple)
功能:获取元组元素的个数
tuple1 = (1, 2, 3, 8, 'hello', 'good')
print(len(tuple1))
#结果
6
5.2 max(tuple)
功能:获取元组中元素的最大值
tuple1 = (1, 2, 3, 8, 20, 13)
print(max(tuple1))
#结果
20
5.3 min(tuple)
功能:获取元组中元素的最小值
tuple1 = (1, 2, 3, 8, 20, 13)
print(min(tuple1))
#结果
1
5.4 tuple(list)
功能:将列表转换为元组
list1 = [1, 2, 3, 8, 20, 13]
print(tuple(list1))
#结果
(1, 2, 3, 8, 20, 13)
6.二维元组
与二维列表类似,一个元组中的元素依然是元组,则成为二维元组。
元组名 =(元组1,元组2,…)
tuple1 = ((1, 2, 3),(4, 5, 6),(7, 8, 9))
二维元组取值
元组名[下标1]【下标2】
tuple1 = ((1, 2, 3),(4, 5, 6),(7, 8, 9))
#获取第一个元组的第一个元素
print(tuple1[0][0])
#结果
1