序列(sequence)
基本概念
- 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
-
序列的分类
可变序列(序列中的元素可以改变):例如 列表(list)
不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
列表(list)
列表是Python中的一个对象
列表的作用
列表的创建:通过[]来创建一个空列表 ```python
增删改查
列表使用[]来表示的 用list来表示
list1 = [1, ‘python’, True, None] print(list1, type(list1))
[1, ‘python’, True, None]
列表就是用来存储对象的对象
取数据 通过索引来取数据
print(list1[0]) print(list1[-1]) print(list1[-2]) print(list1[-3]) print(len(list1))
1 None True python 4
<a name="NkUbD"></a>### 切片- 切片是指从现有列表中获得一个子列表- 通过切片来获取指定的元素- 语法: 列表[起始 : 结束 : 步长]- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素- 起始位置和结束位置的索引可以不写- 如果省略结束位置, 则会从当前的开始位置一直截取到最后- 如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素- 如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素- 步长表示每次获取元素的间隔,默认是1(可以省略不写)- 步长不能是0,但可以是是负数```python# 创建空列表list1 = []print(list1)[]# 切片# 语法: str[] list[起始索引:结束索引:步长]list1 = ['第一', '第二', '第三', '第四', '第五', '第六']print(list1[3:5])print(list1[-2:-4:-1])['第四', '第五']['第五', '第四']
通用操作
- 和 *
- 可以将两个列表拼接成一个列表
- 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
- 和 *
- in 和 not in
- in用来检查指定元素是否在列表当中
- not in 用来检查指定元素是否不在列表当中
- len() 获取列表中元素的个数
- max() 获取列表中最大值
- min() 获取列表中最小值
- list.index(x[, start[, end]])
- 第一个参数 获取指定元素在列表中的位置
- 第二个参数 表示查找的起始位置
- 第三个参数 表示查找的结束位置
- list.count(x) 统计指定元素在列表中出现的个数 ```python a = [1, 2, 3] + [4, 5, 6] b = [1, 2, 3] * 3 print(‘a=’, a) print(‘b=’, b)
a= [1, 2, 3, 4, 5, 6]
b= [1, 2, 3, 1, 2, 3, 1, 2, 3]
a = ‘abcd’ print(‘a’ in a) print(‘e’ in a)
True
False
b = [1, 2, 3, 1] print(max(b)) print(1 in b) # 返回的值是一个布尔值 print(b.index(1)) # index返回的结果就是当前这个数据的索引
print(b.find(1)) # 列表是没有find的这个方法
print(b.count(1)) # 计算指定元素个数
3 True 0 2
<a name="9SPFG"></a>## 修改列表- 通过切片来修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)- 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致- 通过切片来删除元素- del list[起始 : 结束]- list = []<a name="kVwTP"></a>## 列表的方法- append() 像列表的最后添加一个元素- insert(arg1,arg2) 像列表指定位置插入一个元素 参数1:要插入的位置 参数2:要插入的元素- extend(_iterable_) 使用一个新的序列来扩展当前序列(它会将该序列的中元素添加到列表中) 参数需要传递一个序列- pop() 根据索引删除并返回指定元素- remove() 删除指定元素 (如果相同值的元素有多个,只会删除第一个)- reverse() 翻转列表- sort(key=None,reverse=False) 用来对列表中的元素进行排序 reverse:True反序;False 正序```python# 方法 方法是和面向对象相关的 使用方式是 : 对象.方法名('参数')# 添加方法list1 = ['第一', '第二', '第三', '第四', '第五', '第六']# list.append() 向类表中最后的位置插入一个元素list1.append('第七')print(list1)['第一', '第二', '第三', '第四', '第五', '第六', '第七']----------------------------------------------------------list1 = ['第一', '第二', '第三', '第四', '第五', '第六']# list.insert() 向列表中的指定位置插入一个元素,第一个参数是要插入的位置,第二个参数是要插入的内容list1.insert(4, '第八')print(list1)['第一', '第二', '第三', '第四', '第八', '第五', '第六']-------------------------------------------------------list1 = ['第一', '第二', '第三', '第四', '第五', '第六']# list.extend() 使用新的序列来扩展当前序列list1.extend(['第九', '第十'])print(list1)['第一', '第二', '第三', '第四', '第五', '第六', '第九', '第十']-----------------------------------------------------------# 删除方法list1 = ['第一', '第二', '第三', '第四', '第五', '第六']# list.pop() 根据索引删除并返回元素, 如果不传递索引,默认删除最后一个a = list1.pop(2)b = list1.pop()print(a)print(b)print('list1=', list1)第三第六list1= ['第一', '第二', '第四', '第五']--------------------------------------list2 = ['第一', '第二', '第三', '第四', '第五', '第六']print('list2=', list2)# list.remove() 删除指定的元素list2.remove('第三')# d = list2.remove() # 报错,remove() takes exactly one argument (0 given)print('list2=', list2)list2= ['第一', '第二', '第三', '第四', '第五', '第六']list2= ['第一', '第二', '第四', '第五', '第六']----------------------------------------# 反转列表list2 = ['第一', '第二', '第三', '第四', '第五', '第六']# reverse()list2.reverse()print(list2)['第六', '第五', '第四', '第三', '第二', '第一']-----------------------------------------------# 排序# list.sort() 默认是正序排序 他有一个参数reverselist3 = ['第一', '第二', '第三', '第四', '第五', '第六']print(list3)list3.sort(reverse=True) # 汉字排序可能不准print(list3)['第一', '第二', '第三', '第四', '第五', '第六']['第四', '第六', '第五', '第二', '第三', '第一']------------------------list4 = ['a', 'c', 'b', 'd', 'e', 'f']print(list4)list4.sort(reverse=True)print(list4)['a', 'c', 'b', 'd', 'e', 'f']['f', 'e', 'd', 'c', 'b', 'a']-------------------------list5 = [1, 5, 6, 4, 2, 3]print(list5)list5.sort() # 没有参数,默认正序print(list5)[1, 5, 6, 4, 2, 3][1, 2, 3, 4, 5, 6]
作业
- 现在有 a = [1,2,3,4,5,6] 用多种方式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
```python
1
a = [1,2,3,4,5,6] a.reverse() print(a)
[6, 5, 4, 3, 2, 1]
2
a = [1,2,3,4,5,6] a.sort(reverse=True) print(a)
[6, 5, 4, 3, 2, 1]
3
a = [1,2,3,4,5,6] b = [] for i in range(len(a)): b.insert(0,a[i]) print(b)
[6, 5, 4, 3, 2, 1]
4
a = [1,2,3,4,5,6] b = [] j=len(a) for i in range(len(a)): j -=1 b.append(a[j]) print(b)
[6, 5, 4, 3, 2, 1]
5
a = [1,2,3,4,5,6] print(a[::-1]) [6, 5, 4, 3, 2, 1]
2. 给 用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对```python# 创建一个1-10的列表# 用户输入一个数字,你就删除一个数字,同时告诉他你猜错了,请重新输入,如果有输入的同样的数字,做判断# 将删除9次的列表直接取值第一个,就是正确的数字list1 = list(range(1, 11))i = 1while i < 10:num = int(input('请输入1-10的数字:'))if 10 < num or num < 1:print('输入错误,必须是0-10的数。')continueprint('对不起,您猜错了,请继续')list1.remove(num)i += 1print('正确答案是%s' % list1[0])请输入1-10的数字:1对不起,您猜错了,请继续请输入1-10的数字:2对不起,您猜错了,请继续请输入1-10的数字:3对不起,您猜错了,请继续请输入1-10的数字:4对不起,您猜错了,请继续请输入1-10的数字:5对不起,您猜错了,请继续请输入1-10的数字:6对不起,您猜错了,请继续请输入1-10的数字:7对不起,您猜错了,请继续请输入1-10的数字:13输入错误,必须是0-10的数。请输入1-10的数字:8对不起,您猜错了,请继续请输入1-10的数字:9对不起,您猜错了,请继续正确答案是10#其它方法: 创建一个空的列表,进行添加,最后在和1-10的列表进行比较,没有的那个就是正确答案
- 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
```python
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
for i in range(len(lst1)):
for j in range(len(lst2)):
if lst1[i] == lst2[j]:print(lst1[i])
22 33
4. 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中```python#1import randomteacher = ['老师1', '老师2', '老师3', '老师4', '老师5', '老师6', '老师7', '老师8']room_1 = []room_2 = []room_3 = []for i in teacher:j = random.randint(1,3)if j == 1:room_1.append(i)elif j == 2:room_2.append(i)elif j==3:room_3.append(i)print('Room 1: ', room_1)print('Room 2: ', room_2)print('Room 3: ', room_3)Room 1: ['老师4', '老师6']Room 2: ['老师1', '老师2', '老师7', '老师8']Room 3: ['老师3', '老师5']#其它方法# 2. 先随机三个老师,添加到三个办公室中, 然后随意随机其他5位老师# 3. 直接做随机,然后判断办公室有没有为空的情况,如果为空,那么重新生成, 不为空,打印出结果
