Python序列和列表的实例操作
序列
序列是Python中最基本的数据结构。序列用于保存一组有序的数据。所有数据在当前序列中都有唯一的索引,并且序列中的数据会按添加的顺序来分配索引。
数据的结构是指计算机存储数据的方式。
序列的分类:
可变序列(序列中的元素可以改变),如 list 列表,dict字典 ,set 集合。
不可变序列(序列中的元素不可以改变,如字符串strings ,元组tuple。
列表
列表是Python中的一个对象。列表可以保存多个有序的数据,用来存储对象的对象。
#[] 空列表 list
list2 = []
list1 = [1, 'python', True, None]
print(list1, type(list1))
[1, 'python', True, None] <class 'list'>
# 增删改查
print(len(list1)) # 最大索引值+1
print(list1[-3])
4
切片
切片是从现有列表中获得一个子列表。通过切片来获取指定的原素。
语法[开始:结束:步长] [3:9:1]左闭右开型,包含左边不包含右边结束数。
起始位置与结束位置可以不写,如果省略结束位置,会从当前位置开始一直截取到最后;如省略开始位置,则会从第一个元素截取到最后,但不包含最后一个元素。如果开始与结束位置都省略,则会取所有列表中的元素。
步长是一个不为0的正或负整数
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点']
# 切片语法: list[起始位置的索引:结束位置的索引:步长] 左闭右开型
list2 = list1[:] # 省略的写法:0 :包括最后:1 开始与结束位置都省略,则会取所有列表中的元素
['点点', '薛之谦', '江疏影', '周杰伦', '范冰冰', '周慧敏', '刘亦菲']
list2 = list1[:3:2]#如省略开始位置,则会从第一个元素截取到最后,但不包含最后一个元素
['刘亦菲', '范冰冰']
list2 = list1[3:]#省略结束位置,会从当前位置开始一直截取到最后
['周杰伦', '江疏影', '薛之谦', '点点']
list2 = list1[-5:-3:1] #从右向左第5个 :从右向左第3 个:STEP为1,STEP为正数从左向右取值,STEP为负正数,从右向左取值
['范冰冰', '周杰伦']
list2 = list1[-3:-5:-1]#STEP为负正数,从右向左取值
['江疏影', '周杰伦']
list2 = list1[-5:-3:-1]#从右向左第5个 :从右向左第3 个,STEP为负正数,从右向左取值。超出定义的区间,得到空值。
[]
list2 = list1[::-1] #开始与结束位置都省略,则会取所有列表中的元素,通过设置步长的正反方向来确定倒序与正序。
['点点', '薛之谦', '江疏影', '周杰伦', '范冰冰', '周慧敏', '刘亦菲']
列表通用操作
- 和 ×。加+ 可以将两个列表合并成一个列表。× 乘是指单个重复指定次数,两个列表不能相乘。
in 和not in ,要来检查指定元素是否在列表中。
len()是获得列表元素的数量。
max(),min(),
list. index(x[,start[,end]])第一个参数提定元素在列表中位置,第二个表示查找的起始位置,第三个表示查找的结束位置。
list.count(x)
# 加法和乘法操作
a = [1, 2, 3] + [4, 5]
print(a)
[1, 2, 3, 4, 5]
a = [1, 2, 3] * 3
print(a)
[1, 2, 3, 1, 2, 3, 1, 2, 3]
# in not in
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
print('点点' in list1)
True
a = [1, 2, 3]
print(max(a))
3
print(list1.index('周杰伦'))
3
print(list1.count('点点'))
2
增删改查 (python)
#通过索引修改元素
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[-1] = 'Amy' #-1表示从最右侧替换
print(list1)
['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', 'Amy']
# del 关键字删除
del list1[-1]-1表示从最右侧删除
print(list1)
['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点']
# 列表使可变类型
# 通过切片来做增删改查
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[0:3] = 'abcd'
print(list1)
['a', 'b', 'c', 'd', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[0:3] = 1,2,3,4
print(list1)
[1, 2, 3, 4, '周杰伦', '江疏影', '薛之谦', '点点', '点点']
#当设置了步长的时候,序列中元素的个数必须和切片中的元素个数一致
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[::2] = ['cheney']#从0位开始算,按STEP2为改写,应有4 个改写值,这只有一个元素,不一致。
print(list1)
Traceback (most recent call last):
File "C:/Users/benson.gu/PycharmProjects/pythonProject3/pythonlearn1/pythonlearning records/list列表.py", line 73, in <module>
list1[::2] = ['cheney']
ValueError: attempt to assign sequence of size 1 to extended slice of size 4
list1[::2] = ['cheney', 'jerry', 'amy', '居然']
print(list1)
['*cheney*', '周慧敏', *'jerry'*, '周杰伦', '*amy'*, '薛之谦', '*居然*', '点点']
#改写方式删除
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[1:3] = []
print(list1)
['刘亦菲', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
# 不可变类型
str1 = 'abcdef'
str1[1] = 'p'
str1[1] = 'p'
TypeError: 'str' object does not support item assignment
ABCDEF
str2 = str1.upper()
print(str2)
ABCDEF
print(id(str1), id(str2))# Id值 不同
1689828041872 1689829623208
# 强转类型 int float list str
列表中的方法
三个添加方法:
# 1. 向列表中添加一个元素 append() 加到列表最后
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.append('amy')
print('修改后', list1)
修改后 ['薛之谦', '范冰冰', '点点', '点点', '江疏影', '周杰伦', '周慧敏', '刘亦菲']
#2. insert()list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']向列表中指定的位置插入一个元素,两个参数,第一个使插入的位置,第二个是插入的元素
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.insert(2, 'amy')
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', 'amy', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
# 3. extend()使用新的列表来扩展当前列表
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.extend(['cheney', 'jerry'])
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点', 'cheney', 'jerry']
# 清空列表 clear()
list1.clear()
print('修改后', list1)
修改后 []
# 删除操作
# pop() 根据索引删除并返回执行的元素, 如果不传递索引,默认删除最后一个
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.pop(-3)
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '点点', '点点']
# remove() 删除指定的元素
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.remove('点点') #相同值删除右侧第一位
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点']
# 反转列表reverse()
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.reverse()
print('修改后', list1)
修改后 ['点点', '点点', '薛之谦', '江疏影', '周杰伦', '范冰冰', '周慧敏', '刘亦菲']
# sort()排序一起结合使用 默认是正序排列
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.sort()
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '周杰伦', '江疏影', '点点', '点点', '范冰冰', '薛之谦']
list1.sort(reverse=True)
print('修改后', list1)
修改后 ['薛之谦', '范冰冰', '点点', '点点', '江疏影', '周杰伦', '周慧敏', '刘亦菲']
for 循环与range 函数
#for循环是遍历: 指的时把列表中的元素取出来
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
#print(list1[0])
#print(list1[1])
#print(list1[2])
#print(list1[3])
#print(list1[4])
#print(list1[5])
i = 0
while i < 8:
print(list1[i])
i += 1
刘亦菲 周慧敏 范冰冰 周杰伦 江疏影 薛之谦 点点 点点
#for循环语法: for 变量 in 遍历的序列:代码块
#在for循环中,对遍历的元素做操作,只限于for循环之内,代码运行出for循环,那么原来的修改不做保存。
list2 = [1, 2, 3, 4, 5]
list3 = []
for i in list2:
list3.append(i)
print(list3)
[1, 2, 3, 4, 5]
#range()函数#左闭右开
#range()#左闭右开
print(list(range(9)))#左闭右开,默认从低到高
[0, 1, 2, 3, 4, 5, 6, 7, 8]
print(list(range(8,-1,-1)))左闭右开,默认从低到高,可以通过设负的STEP改为从高到低
[8, 7, 6, 5, 4, 3, 2, 1, 0]
for i in range(0, 9, 3):#左闭右开
print(i,end=' ')#左闭右开
0 3 6
Homework
#将列表[1, 2, 3, 4, 5, 6] 改为倒序
list1 = [1, 2, 3, 4, 5, 6]
list2 = []
for i in list1:
list2.insert(0, i)
print(list2)
[6, 5, 4, 3, 2, 1]
或
list1 = []
for i in range(6,0,-1): #由高至低遍历
list1.append(i)
print(list1)
#2. 给 用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
i = 1
list2=[]
while i < 10:
i += 1
num = int(input('请输入1-10的数字'))
if num < 1 or num > 10:
print('对不起,您猜错了')
continue
res = list2.append(num)
while list2.count(num)>1: # 解决重复输入不能从list1中remove程序报错。
print('对不起,您猜错了')
break
else:
list1.remove(num)
print("对不起,您猜错了")
else:
print('正确答案是%s' % list1[0])
#3.1 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
#方法1
print(set(lst1)&set(lst2))
{33, 22}
#方法2
for i in lst1:
for j in lst2:
if i == j:
print(i,end=' ')
22 33
#4. 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中
- 创建一个列表装8位老师
- 创建一个列表装三个办公室
- 遍历老师,随机出办公室,讲老师添加到办公室中(可能会出现某个办公室为空)
- 打印办公室
import random
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]
for teacher in teachers:
# random.randint随机数字
# random.choices()随机列表中的元素
num = random.randint(0, 2) #此处用0,2,是因为列表有三个空需要填。
offices[num].append(teacher)
else:
print(offices)
#3.2 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中, 要求每个办公室都要有人
#1. 随机出来,做判断,有空则重新生成
#2. 先随机出来三位老师放到三个办公室里(并从原列表中移除),再随机放入其他的老师 。
import random
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]
num = random.sample(teachers, 3)
offices[0].append(num[0])
offices[1].append(num[1])
offices[2].append(num[2])
teachers.remove(num[0])
teachers.remove(num[1])
teachers.remove(num[2])
for teacher in teachers:
# random.randint随机数字
# random.choices()随机列表中的元素
num2 = random.randint(0, 2)
offices[num2].append(teacher)
else:
print(offices)
本文地址:https://blog.csdn.net/weixin_50587406/article/details/111072133
上一篇: 如何写一个 Vue3 的自定义指令
下一篇: 列表、元组和字典