" 你还记得他(她)的忧伤吗 ?"
Python基础(内容基于逻辑教育Cheney课程)
这篇文章将带我们了解到:
- 序列(字符串序列和列表序列)
- 列表的常用操作及常用方法
- for循环和range函数
1、序列
基本概念
- 序列是Python中最基本的一种数据结构
- 序列用于保存一组有序的数据
- 所有的数据在序列中都有一个唯一的位置(索引)
- 序列中的数据会按照添加的顺序来分配索引
- 数据结构指计算机中数据存储的方式
序列的分类
- 可变序列(序列中的元素可以改变):例如 列表(list)
- 不可变序列(序列中的元素不能改变):例如 字符串(str) 元组(tuple)
a = "abc"
a[0] = "b"
# 利用索引 将 a[0] = "a" 改变是不可以实现的
报错
l = [1,2,3,4,5]
l[3] = 5
# 利用索引 将 l[3] = 4 改变为 5 是可以实现的
print(l)
输出:[1, 2, 3, 5, 5]
2、列表
2.1、切片
切片
- 切片是指从现有列表中获得一个子列表
- 通过切片来获取指定的元素
- 语法:列表[起始位置:结束位置:步长]
- 通过切片获取元素时、会包括起始位置的元素、不会包括结束位置的元素
2.2、列表
列表
- Python中的一个对象
列表的作用
- 列表中可以保存多个有序的数据
- 列表是用来存储对象的对象
列表的创建
- 通过[ ]来创建一个空列表
列表的类型(list)
list1 = [1,"python",True,None]
print(list1,type(list1))
输出:[1, 'python', True, None] <class "list">
2.2.1、利用索引取出列表中的元素
# 利用索引取出列表中的元素
list1 = [1,"python",True,None]
print([list1[1])
输出:python
2.2.2、查看列表的长度
list1 = [1,"python",True,None]
print(len(list1))
输出:4
2.2.3、创建空的列表
list1 = []
print(list1)
输出:[]
2.2.3、列表常用操作
列表加法和乘法(+、*)
- 我们这里认为的二种序列:字符串序列和列表序列
- 两种相同的序列才可以进行加法操作
- 序列只能和整数相乘
l1 = [1,2,4]
l2 = [4,5,6]
l3 = ['9','10']
l4 = "abc"
print(l1+l2)
print(l1+l3)
print(l1+l4)# l1为列表序列、l4为字符串序列
输出:
[1, 2, 4, 4, 5, 6]
[1, 2, 4, '9', '10']
报错
l1 = "python"
l2 = [1,2,3]
print(l1 * 2)
print(l2 * 2)
print(l1 * 2.3)
print(l2 * 2.3)
print(l1 * l2)
输出:
pythonpython
[1, 2, 3, 1, 2, 3]
报错
报错
报错
列表的在与不在(in、not in)
- in 用来检查指定元素是否在列表中
- not in 用来检查指定元素是否不在列表当中
a = "abc"
print("a" in a)
print("d" in a)
# 返回值为 True 和 False (布尔值)
输出:
True
False
b = [1,2,3]
print(1 in b)
输出:True
列表的最大最小值函数(max、min)
- max 用来获取列表中的最大值
- min 用来获取列表中的最小值
- 且列表里面类型需要相同(str)和(int)
b = [1,2,3]
print(max(b))
print(min(b))
输出:
3
1
b = [1,2,3,"4"]
print(max(b))
print(min(b))
输出:报错
b = ["1","2","3","4"]
print(max(b))
print(min(b))
输出:
4
1
列表查找函数(index)
- 位置用索引表示)
- 列表中没有 find 查找
b = [1,2,3]
print(b.index(4))
print(b.index(3))
输出:
报错
2
列表统计元素出现的次数 (count)
b = [1,2,3,3]
print(b.count(1))
print(b.count(3))
输出:
1
2
列表删除列表关键字(del)
list1 = [1,2,3,4,5]
del list[-1]
del list[1]
print(list1)
输出:[1, 3, 4]
列表利用切片修改其中数据
- 替换的数据需要是序列(字符串序列或列表序列)
- 当设置了步长取出了多少数据、替换的时候、就得用多少个
- list[0:0] 相当于在序列最前面添加数据
# 序列替换
list1 = [1,2,3,4,5]
list1[0:2] = [2,1]
print(list1)
输出:[2, 1, 3, 4, 5]
# 字符串替换(等量)
list1 = [1,2,3,4,5]
list1[0:2] = "21"
print(list1)
输出:['2', '1', 3, 4, 5]
# 字符串替换(不等量)
list1 = [1,2,3,4,5]
list1[0:2] = "2"
print(list1)
输出:['2', 3, 4, 5]
# 步长为 2 、数据需要 3 个
list1 = [1,2,3,4,5]
list1[::2] = [1,1,1]
print(list1)
输出:[1, 2, 1, 4, 1]
# list[0:0] 相当于在序列最前面添加数据
list1 = [1,2,3,4,5]
list1[0:0] = [1,1,1]
print(list1)
输出:[1, 1, 1, 1, 2, 3, 4, 5]
列表利用切片删除其中数据
list1 = [1,2,3,4,5]
list1[0:2] = []
print(list1)
输出:[3, 4, 5]
list1 = [1,2,3,4,5]
list1[0:2] = ""
print(list1)
输出:[3, 4, 5]
2.2.4、列表的方法
列表在最后的位置插入一个数据(append)
list1 = [1,2,3,4,5]
list1.append(6)
print(list1)
输出:[1, 2, 3, 4, 5, 6]
列表指定在对应位置插入数据(insert)
list1 = [1,2,3,4,5]
list1.insert(1,100)
print(list1)
输出:[1, 100, 2, 3, 4, 5]
列表使用新的列表扩展当前列表(extend)
list1 = [1,2,3,4,5]
list1.extend([6,7,8,9])
print(list1)
输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表根据索引删除元素(pop)
- 根据索引删除并返回元素(a = list1.pop())
- 如果不传递索引、默认删除最后一个
list1 = [1,2,3,4,5]
list1.pop()
print(list1)
输出:[1, 2, 3, 4]
list1 = [1,2,3,4,5]
a = list1.pop(1)
print(list1)
print(a)
输出:
[1, 3, 4, 5]
2
列表删除指定的元素(remove)
list1 = [1,2,3,4,5]
list1.remove(1)
print(list1)
输出:[2, 3, 4, 5]
列表正逆排序(sort)
- 默认是正序排列
- 一个参数reverse值为True时逆序排列
# 正序
list1 = [1,2,3,4,5]
list1.sort()
print(list1)
输出:[1, 2, 3, 4, 5]
# 逆序
list1 = [1,2,3,4,5]
list1.sort(reverse = True)
print(list1)
输出:[5, 4, 3, 2, 1]
3、for循环遍历
3.1、for循环
一、语法
# 语法
for 变量 in 序列(遍历的规则)
代码块
二、注意
- for循环的代码会执行多次
- 序列中有几个元素就会执行几次
- 每执行一次会将序列中的一个元素赋值给变量
- 我们可以通过变量来获取列表中的元素
- 遍历之后不会改变原列表
@
list1 = [1,2,3,4,5]
for i in list1:
print(i)
输出:
1
2
3
4
5
@
list1 = [1,2,3,4,5]
for i in list1:
i += 1
print(i)
输出:
2
3
4
5
6
@
list1 = [1,2,3,4,5]
for i in list1:
i += 1
print(i)
print(list1)
输出:
2
3
4
5
6
[1, 2, 3, 4, 5]
改变原列表(使用空列表)
list1 = [1,2,3,4,5]
list2 = []
for i in list1: #遍历list1中的元素
i += 1
list2.append(i)
print(list2)
输出:[2, 3, 4, 5, 6]
3.2、range函数
#语法
range(开始位置,结束位置,步长) 开始位置可以省略、省略即开始位置为0、步长省略为1
range(9) # 相当于range(0,9,1)
print(range(9))
print(list(range(9))) # 强制转换格式
输出:
range(0, 9)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
4、程序举例
一、现在有 a = [1,2,3,4,5,6] 用多种方式实现列表的反转、并写出推导过程
# 以切片的方式反转列表
a = [1,2,3,4,5,6]
print(a[::-1])
输出:[6, 5, 4, 3, 2, 1]
# 以sort函数反转列表
a = [1,2,3,4,5,6]
a.sort(reverse = True)
print(a)
输出:[6, 5, 4, 3, 2, 1]
二、给用户9次机会猜1~10个数字、如果随机的数字与用户输入的数字一致则表示正确、如果不一致则表示错误、最终结果要求用户怎么猜也猜不对
list1 = list(range(1,11))
i = 1
while i < 10:
num = int(input("请输入1~10的数字:"))
print("您猜错了、请继续")
list1.remove(num)
i += 1
print("正确答案是%s"% list1[0])
三、二个列表 list1 = [11,22,33] 、list2 = [22,33,44]获取内容相同的元素
# 方法一
list1 = [11,22,33]
list2 = [22,33,44]
list3 = list1 + list2
i = 0
while i < 6:
for i in list3:
a = list3.count(i)
if a == 2:
print(i)
输出:
22
33
22
33
# 方法二
list1 = [11,22,33]
list2 = [22,33,44]
for i in list1:
if i in list2:
print(i)
输出:
22
33
四、现在有8位老师、3个办公室、要求将8位老师随机分配到三个办公室
import random
offices = [[],[],[]]
teacher = ["A","B","C","D","E","F","G","H"]
for name in teacher:
index = random.randint(0,2) #生成随机数0-2
offices[index].append(name) #将老师随机的放入办公室
i = 1
for office in offices:
print("办公室%d的人数是:%d"%(i,len(office)))
i=i+1
for name in office:
print("%s"%name,end="\t")
print()
print("-"*20)