『无为则无心』Python序列 — 19、Python列表的其他操作(切片和遍历)
上一篇文章介绍了列表操作的常用API,本篇文章再说明一些列表(
List)其他一些很常用的操作。
1、通过切片对列表的操作
注意:在给切片进行赋值时,只能使用序列赋值。
(1)通过切片对列表进行修改
"""
1、使用一个序列替换,一个列表的片段。
注意:不过替换序列的当度是多少,
都完全替换列表中的指定位置,前闭后开。
输出结果:
修改前: ['孙悟空', '猪八戒', '沙和尚', '唐僧']
修改后: ['牛魔王', '红孩儿', '沙和尚', '唐僧']
"""
stus = ['孙悟空','猪八戒','沙和尚','唐僧']
print("修改前:", stus)
stus[0:2] = ['牛魔王','红孩儿']
# stus[0:2] = ['牛魔王','红孩儿','二郎神','白骨精']
# stus[0:2] = ['牛魔王']
print("修改后:", stus)
"""
2、向列表中指定位置插入一个序列
输出结果:
修改前: ['孙悟空', '猪八戒', '沙和尚', '唐僧']
修改后: ['牛魔王', '孙悟空', '猪八戒', '沙和尚', '唐僧']
"""
# 向索引为0的位置插入元素
stus = ['孙悟空','猪八戒','沙和尚','唐僧']
print("修改前:", stus)
stus[0:0] = ['牛魔王']
# stus[2:2] = ['牛魔王']
print("修改后:", stus)
"""
3、当设置了步长时,
序列中元素的个数必须和切片中元素的个数一致。
输出结果:
修改前: ['孙悟空', '猪八戒', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
修改后: ['牛魔王', '猪八戒', '红孩儿', '唐僧', '二郎神', '白骨精']
"""
stus = ['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精']
print("修改前:", stus)
stus[::2] = ['牛魔王','红孩儿','二郎神']
# stus[::2] = ['牛魔王','红孩儿'] # 报错
# stus[2::2] = ['牛魔王','红孩儿'] # 正常
print("修改后:", stus)
"""
当stus[::2],表示全列表,每两步选一个元素,
列表一个有6个元素,
所以该切片一个有三个元素。
所以后边赋值三个元素的序列就能够成功。
当stus[::2],同理切片中元素是3,
你赋值两个元素的序列,不相等,就报错。
当stus[2::2], 切片中元素是2,
你赋值两个元素的序列,相等,则正常修改。
"""
(2)通过切片对列表进行删除
"""
# 在列表中删除切片中的元素
输出结果:
修改前: ['孙悟空', '猪八戒', '沙和尚', '唐僧']
修改后: ['沙和尚', '唐僧']
修改后: ['唐僧']
修改后: ['唐僧']
"""
stus = ['孙悟空','猪八戒','沙和尚','唐僧']
print("修改前:", stus)
del stus[0:2]
print("修改后:", stus)
del stus[::2]
print("修改后:", stus)
stus[1:3] = []
(3)注意
以上操作,只适用于可变序列。
包括列表中学习的方法,只能支持可变序列。
2、列表的循环遍历
什么是遍历,就是安顺序依次访问到序列当中的每一个数据。换句话说遍历指的就是将列表中的所有元素一个一个的取出来。
需求:依次打印列表中的各个数据。
(1)while循环遍历
"""
输出结果:
Tom
Lily
Rose
"""
name_list = ['Tom', 'Lily', 'Rose']
i = 0
while i < len(name_list):
print(name_list[i])
i += 1
"""
如果遍历的下标越界,则会抛出异常,
IndexError: list index out of range
"""
name_list = ['Tom', 'Lily', 'Rose']
i = 0
while i < len(name_list)+2:
print(name_list[i])
i += 1
(2)for循环遍历
只要是序列,就都可以使用for循环遍历。
"""
输出结果:
Tom
Lily
Rose
"""
name_list = ['Tom', 'Lily', 'Rose']
for i in name_list:
print(i)
3、列表嵌套
所谓列表嵌套指的就是一个列表里面包含了其他的子列表。
应用场景:要存储班级一、二、三3个班级学生姓名,且每个班级的学生姓名在一个列表。
name_list = [['小明', '小红', '小绿'], ['Tom', 'Lily', 'Rose'], ['张三', '李四', '王五']]
思考: 如何查找到数据"李四"?
# 第一步:按下标查找到李四所在的班级列表
# 结果:['张三', '李四', '王五']
print(name_list[2])
# 第二步:从李四所在的班级列表里面,再按下标找到数据李四
# 结果:李四
print(name_list[2][1])
4、综合示例
需求:有三个办公室,8位老师,8位老师随机分配到3个办公室
"""
步骤:
1. 准备数据
1.1 8位老师 -- 列表
1.2 3个办公室 - 列表嵌套
2. 分配老师到办公室
随机分配,调用random函数
就是把老师的名字写入到办公室列表中,
换句话说就是向办公室列表追加老师名字。
3. 验证是否分配成功
打印办公室详细信息:每个办公室的人数和对应的老师名字。
"""
import random
# 1. 准备数据,老师和办公室
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]
# 2. 分配老师到办公室
# 遍历老师列表数据,取到的每个老师随机放到一个办公室列表。
for name in teachers:
# 列表追加数据 -- append(选择) extend insert
# num随机办公室号
num = random.randint(0, 2)
offices[num].append(name)
# 以上代码,老师已经分配完办公室,下面只是输出格式。
# 为了更贴合生活,把各个办公室子列表加一个办公室编号 1, 2, 3
i = 1 # 办公室编号
# 3. 验证是否分配成功
for office in offices:
# 打印办公室人数
# 子列表数据的个数用len()获取
print(f'办公室{i}的人数是{len(office)},老师分别是:')
# 打印每个办公室内老师的名字
for name in office:
print(name)
i += 1
『无为则无心』Python序列 — 19、Python列表的其他操作(切片和遍历)的更多相关文章
- 『无为则无心』Python序列 — 18、Python列表概念及常用操作API
目录 1.列表的概念 (1)列表的定义 (2)列表的应用场景 (3)列表的定义格式 2.列表的常用操作 (1)列表的查找 1)通过下标查找 2)通过方法查找 3)判断是否存在 (2)列表的增加 @1. ...
- 『无为则无心』Python序列 — 23、Python序列的公共API
目录 1.运算符 @1.+加号 @2.*乘号 @3.in或not in 2.公共方法 @1.len()方法 @2.del和del() @3.max()方法 @4.min()方法 @5.range() ...
- 『无为则无心』Python序列 — 24、Python序列的推导式
目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...
- 『无为则无心』Python基础 — 62、Python中自定义迭代器
目录 1.迭代器对象的创建 2.实际应用案例 3.总结: 1.迭代器对象的创建 迭代器是一种可以被遍历的对象,并且能够作用于next()函数,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...
- 『无为则无心』Python基础 — 10、Python字符串的格式化输出
目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...
- 『无为则无心』Python基础 — 12、Python运算符详细介绍
目录 1.表达式介绍 2.运算符 (1)运算符的分类 (2)算数运算符 (3)赋值运算符 (4)复合赋值运算符 (5)比较运算符 3.逻辑运算符 拓展1:数字之间的逻辑运算 拓展2:Python中逻辑 ...
- 『无为则无心』Python基础 — 4、Python代码常用调试工具
目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...
- 『无为则无心』Python基础 — 6、Python的注释
目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...
- 『无为则无心』Python基础 — 7、Python的变量
目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...
随机推荐
- xxl-job源码阅读二(服务端)
1.源码入口 xxl-job-admin是一个简单的springboot工程,简单翻看源码,可以很快发现XxlJobAdminConfig入口. @Override public void after ...
- [java] XML DTD XSD
XML是用来干什么的 https://bbs.csdn.net/topics/120762 https://blog.csdn.net/Rain722/article/details/52925828 ...
- 011.Ansible条件语句
一 简介 在有的时候play的结果依赖于变量.fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task.这个时候就需要用到条件判断. 条件语 ...
- Lua中的元表(metatable)、元方法(metamethod)详解
在第一次看见这两样东西的时候,可能会觉得它很深奥,但其实很好理解,虽然实际上它可能真的很深奥.(小若:停!滚粗.) 1.知道为什么1 + 1 = 2吗? 为什么在Lua中,1+1会等于2呢?(小若:难 ...
- python 中 list 的append与extend区别
append 添加的是一个对象 extend 添加的是序列与原序列合并
- 分布式锁中的王者方案-Redisson
上篇讲解了如何用 Redis 实现分布式锁的五种方案,但我们还是有更优的王者方案,就是用 Redisson. 缓存系列文章: 缓存实战(一):20 图 |6 千字|缓存实战(上篇) 缓存实战(二):R ...
- stream的groupby出来的map是有顺序的map
stream分组后的map是有序map List<RedisInstanceTypeDto> typeDtoList = ModuleHelper.mapAll(redisInstance ...
- MindSpore平台系统类
MindSpore平台系统类 Q:MindSpore只能在华为自己的NPU上跑么? A: MindSpore同时支持华为自己的Ascend NPU.GPU与CPU,是支持异构算力的. Q:MindSp ...
- CUDA 内存统一分析
CUDA 内存统一分析 关于CUDA 编程的基本知识,如何编写一个简单的程序,在内存中分配两个可供 GPU 访问的数字数组,然后将它们加在 GPU 上. 本文介绍内存统一,这使得分配和访问系统中任何处 ...
- 什么是阻塞、非阻塞、同步和异步以及IO模型
首先先看如下几个问题,或者说我们经常会遇到的问题. 阻塞是否等于同步?非阻塞是否等于异步?同步一定是阻塞的么?异步一定是非阻塞的么?要把这四个概念讲明白,先从一顿简餐说起.假设你要做一顿便饭:烧土豆: ...