[Python基础] 序列(列表/元组)和字典的操作详解

news/2024/4/25 0:15:51/

文章目录

  • 序列概念
  • 序列
    • 列表
      • 列表的创建和下标访问
        • 创建
        • 下标
      • 列表的切片操作
      • 列表的遍历
      • 列表的插入操作
      • 列表的查找和删除
      • 列表的拼接
    • 元组
      • 元组的相关操作
  • 字典概念
      • 字典的创建
      • 查找字典中的key,value
      • 字典的增删改
      • 字典的遍历

序列概念

包含若干个元素, 元素有序排列, 可以通过下标访问到一个或者多个元素. 这样的对象, Python中统一称为序列
(Sequence).

Python中以下三种都属于序列:

  • 字符串
  • 元组
  • 列表

序列

列表

列表可以理解为其他语言中的数组

列表的创建和下标访问

创建

字面值创建

# [] 表示一个 空的列表
a = []
print(type(a))	# <class 'list'># 创建列表时指定初始值
a = [1, 2, 3, 4]
print(a)	# [1, 2, 3, 4]# 可以在同一个列表中放不同类型的变量
a = [1, 'hello', True, [4, 5, 6]]
print(a)

list()创建

b = list()
print(type(b))	# <class 'list'>

下标

访问修改

# 使用下标来访问列表元素
a = [1, 2, 3, 4]
print(a[2])	# 3# 使用下标来修改列表元素
a[2] = 100
print(a)	# 100

下标越界 && 为负

  • 超出下标有效范围, 出现异常报错
a = [1, 2, 3, 4]
a[4] = 0	#只能访问到a[3]
print(a)
  1. python中的下标可以写成负数:-1 等价于 len(a) - 1
  2. 即a[-1]就是倒数第一个元素
a = [1, 2, 3, 4]
print(a[len(a) - 1])	# 4
print(a[-1])	# 4

列表的切片操作

基本使用

1:3 为左闭右开,即[1,3]范围,打印出的结果为[2, 3]

a = [1, 2, 3, 4]
print(a[1:3])

省略边界

# 省略边界.
# a = [1, 2, 3, 4]
# # 省略后边界, 即从开始位置, 一直取到整个列表结束
print(a[1:])    # [2, 3, 4]
# 省略前边界, 即从列表的 0 号元素开始取, 一直取到结束的后边界
print(a[:2])    # [1, 2]
# 切片下标使用负数,即打印到倒数第一个之前
print(a[:-1])   # [1, 2, 3]
# 把开始边界和结束边界都省略掉 得到的还是列表自身
print(a[:]) # [1, 2, 3, 4]

带步长的切片操作

::2 即步长为2,每两个打印一个(隔一个打印)
1::-1::2 [-1, 1)的范围内步长为二输出

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[::1])   # [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[::2])   # [1, 3, 5, 7, 9]
print(a[1:-1:2])    # [2, 4, 6, 8]
  • 步长为负数,即从后向前取
print(a[::-1])  # [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(a[::-2])  # [0, 8, 6, 4, 2]
  • 切片范围越界,不报错
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[1:100]) # [2, 3, 4, 5, 6, 7, 8, 9, 0]

列表的遍历

for循环遍历

  • for循环直接遍历,不能更改其元素值
a = [1, 2, 3, 4, 5]
for elem in a:print(elem)elem = elem + 10
print(a)	#[1, 2, 3, 4, 5]

相当于将列表里的元素赋给elem,对elem操作并不会影响列表的内容

  • for循环通过下标遍历
a = [1, 2, 3, 4, 5]
for i in range(0, len(a)):# print(a[i])a[i] = a[i] + 10print(a)	# [11, 12, 13, 14, 15]

while循环遍历

a = [1, 2, 3, 4, 5]
i = 0
while i < len(a):print(a[i])i += 1
print(a)    # [1, 2, 3, 4, 5]

列表的插入操作

append()

  • 即尾插操作,可以对列表插入任意类型的元素
a = [1, 2, 3, 4]
a.append(5)
a.append('hello')
print(a)    # [1, 2, 3, 4, 5, 'hello']

insert()

  1. 在列表的任意位置插入元素
a = [1, 2, 3, 4]
a.insert(1, 'hello')
a.insert(100, 'python') #越界不会报错
print(a)    # [1, 'hello', 2, 3, 4, 'python']

列表的查找和删除

查找

  • 使用in / not in 判断一个元素是否在 / 不在 一个列表中
a = [1, 2, 3, 4, 5]
print(1 in a)   # True
print(100 in a) # False
print(3 not in a)   # False
print(300 not in a) # True
  • 使用index查找一个元素在列表中的位置,返回下标
a = [1, 2, 3, 4]
print(a.index(2))   # 1
print(a.index(3))   # 2
print(a.index(0))   # 报错,0不在列表中

删除

  • 使用pop进行尾删 / 删除指定位置
# 尾删
a = [1, 2, 3, 4]
a.pop()
print(a) # [1, 2, 3]# 传下标删除指定元素
a = [1, 2, 3, 4]
a.pop(1)
print(a) # [1, 3, 4]
  • 使用remove 通过元素内容进行删除
a = ['aa', 'bb', 'cc', 'dd']
a.remove('cc')
print(a)    # ['aa', 'bb', 'dd']

列表的拼接

  • 使用+针对两个列表进行拼接
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = b + a
print(c)    # [5, 6, 7, 8, 1, 2, 3, 4]
print(a)    # [1, 2, 3, 4]
print(b)    # [5, 6, 7, 8]
  • 使用extend进行拼接

需要注意的是extend不能只添加一个元素(),如a.extend(9),可以使用a.extend([9])

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a.extend(b)
print(a)    # [1, 2, 3, 4, 5, 6, 7, 8]
print(b)    # [5, 6, 7, 8]
print(c)    # None

None就是没有元素的意思,extend将b拼接给a,用c去接收不会得到什么

  • 使用+=拼接

+= 操作符可以用于向列表末尾添加单个元素,也可以用于向列表末尾追加另一个列表中的所有元素。

a = [1, 2, 3]
a += [4, 5, 6]
print(a)  # 输出 [1, 2, 3, 4, 5, 6]

元组

元组和列表最本质的区别是:元组是不可变的数据类型,而列表是可变的。

元组的操作跟列表的基本操作相差不大,这里简单举例

元组的相关操作

  1. 创建元组
# 1. 创建元组
a = ()
print(type(a))  # 输出 <class 'tuple'>
b = tuple()
print(type(b))  # 输出 <class 'tuple'>
  1. 创建元组的时候, 设置初始值
# 2. 创建元组的时候, 设置初始值
a = (1, 2, 3, 4)
print(a)
  1. 元组中的元素也可以是任意类型的
# 3. 元组中的元素也可以是任意类型的.
a = (1, 2, 'hello', True, [])
print(a)
  1. 通过下标来访问元组中的元素, 下标也是从 0 开始, 到 len - 1 结束
# 4. 通过下标来访问元组中的元素, 下标也是从 0 开始, 到 len - 1 结束
a = (1, 2, 3, 4)
print(a[1])
print(a[-1])
# print(a[100]) # 超出元组范围访问会报错
  1. 通过切片来获取元组中的一个部分
# 5. 通过切片来获取元组中的一个部分
a = (1, 2, 3, 4)
print(a[1:3])
  1. 同样可以用 for 循环等方式来进行遍历元素 / 下标方式遍历 / while循环遍历
# 6. 同样可以用 for 循环等方式来进行遍历元素 / 下标方式遍历 / while循环遍历
a = (1, 2, 3, 4)
for elem in a:print(elem)
  1. 可以使用 in 来判定元素是否存在, 使用 index 查找元素的下标.
# 7. 可以使用 in 来判定元素是否存在, 使用 index 查找元素的下标
a = (1, 2, 3, 4)
print(3 in a)
print(a.index(3))
  1. 可以使用 + 来拼接两个元组
# 8. 可以使用 + 来拼接两个元组
a = (1, 2, 3)
b = (4, 5, 6)
print(a + b)	# 输出 (1, 2, 3, 4, 5, 6)
  1. 元组只是支持 “读” 操作, 不能支持 “修改” 类操作
# 9. 元组只是支持 "读" 操作, 不能支持 "修改" 类操作
# a = (1, 2, 3, 4)
# a[0] = 100    # 报错# 报错 ↓
# a.append(5)
# a.pop(0)
# a.extend()
  1. 当进行多元赋值的时候, 其实本质上是按照元组的方式来进行工作的
# 10. 当进行多元赋值的时候, 其实本质上是按照元组的方式来进行工作的
def getPoint():x = 10y = 20return x, yx, y = getPoint()
print(type(getPoint())) # <class 'tuple'>

字典概念

Python的字典是一种映射类型数据. 里面的数据是 键值对 .

Python的字典是基于hash表实现的。

  • 键(key): 字典的键是唯一的(一个字典对象中不能有两个相同的键). 同时字典的键必须是可hash的(能够计算出一个固定的hash值
  • 值(value):任意类型的值

字典的创建

# 1. 创建字典
a = {}
print(type(a))  # <class 'dict'>
b = dict()
print(type(b))  # <class 'dict'># 2. 创建字典的同时设置初始值.
a = {'id': 1, 'name': 'zhangsan'}a = {'id': 1,'name': 'zhangsan',
}
print(a)    # 输出 {'id': 1, 'name': 'zhangsan'}

查找字典中的key,value

  • 形如 'id': 1 称为一个键值对,左边的为key,右边为value
  • 使用 in / not in 判断一个元素是否是字典中的key(不能用来查找value)
# 使用 in 来判定某个 key 是否在字典中存在
a = {'id': 1,'name': 'zhangsan'
}print('id' in a)    # True
print('classId' in a)   # False# in 只是判定 key 是否存在, 和 value 无关
print('zhangsan' in a)  # False# not in 来判定 key 在字典中不存在
print('id' not in a)    # False
print('classId' not in a)   #True
  • 通过[key]的方式查找value
# 使用 [ ] 来根据 key 获取到 value
a = {'id': 1,'name': 'zhangsan',100: 'litiansuo'
}print(a['id'])  # 输出 1
print(a['name'])    # 输出 zhangsan
print(a[100])   # 输出litiansuo
# print(a['classId']) # 不存在,报错

字典的增删改

对于下面的一个字典:

a = {'id': 1,'name': 'zhangsan'
}

插入键值对

a['score'] = 90
print(a)    # 输出 {'id': 1, 'name': 'zhangsan', 'score': 90}

根据key修改value

a['score'] = 100
print(a)    # 输出 {'id': 1, 'name': 'zhangsan', 'score': 100}

根据key删除键值对

a.pop('name')
print(a)    # 输出 {'id': 1, 'score': 100}

字典的遍历

对于下面的字典:

a = {'name': 'zhangsan','id': 1,'score': 90
}
  1. 用for循环遍历
for key in a:print(key, a[key])
for key, value in a.items():print(key, value)

在这里插入图片描述

这两种方式输出结果都是图示结果

  1. 利用相关函数打印
print(a.keys())
print(a.values())
print(a.items())

输出结果:
在这里插入图片描述


http://www.ppmy.cn/news/47308.html

相关文章

Chapter10-NameServer 源码解析

10.1 模块人口代码的功能 10.1.1 入口函数 首先看一下 NameServer 的源码目录&#xff08;见图 10-1 &#xff09; 。NamesrvStartup 是模块的启动入 口&#xff0c; NamesrvController 是用来协块各个调模功能的代码。 我们从启动代码开始分析&#xff0c;找到 NamesrvStartup…

JavaScript【一】JavaScript变量与数据类型

文章目录 &#x1f31f;前言&#x1f31f;变量&#x1f31f; 变量是什么&#xff1f;&#x1f31f; 变量提升&#x1f31f; 声明变量&#x1f31f; JavaScript有三种声明方式&#x1f31f; 命名规范&#x1f31f; 注意 &#x1f31f;数据类型以及运算&#x1f31f; 检测变量数据…

MySQL运维28-MySQL复制

文章目录 1、MySQL复制模式2、MySQL复制的兼容性3、与MySQL复制相关的两种日志3.1、中继日志3.2、MySQL复制的状态日志 4、MySQL主从复制的实施示例4.1、主从库安装4.2、主库配置4.3、从库的配置4.4、启动复制和确认成功 5、对MySQL复制的监控6、MySQL监控的运维6.1、在从库修改…

第二部分——长难句——第一章——并列句

conjunction(and,but,if,when(while)) 想把两个句子&#xff08;多件事&#xff09;连在一块&#xff0c;就必须加上连词。 所以长难句到底是啥&#xff1f; 所以长难句&#xff08;直白表达&#xff0c;并不是语法表述&#xff09;就是几个简单句多家上几个连接词就齐活了&am…

python删除csv文件中的某几列或行

1. 读取数据 用pandas中的read_csv()函数读取出csv文件中的数据: import pandas as pddf pd.read_csv("comments.csv") df.head(2)用drop函数进行文件中数据的删除行或者删除列操作。 2. 删除列操作 方法一&#xff1a;假设我们要删除的列的名称为 ‘观众ID’,‘…

React styled-components(二)—— props、attrs属性

styled-components props、attrs属性 propsprops 穿透添加 attrs 属性获取 state 中的样式 变量控制样式通过 props 控制样式通过 css 控制样式 props props 穿透 styled-components 可以 props 穿透&#xff0c;把属性穿透到元素中。 通常&#xff0c;用 css 的 input 组件…

一文了解Gralde

&#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司实习&#x1f…

自动驾驶就是在扯?比亚迪你凭什么?

比亚迪“炮轰”自动驾驶 上周&#xff0c;在比亚迪2022年财报交流会上&#xff0c;有投资人问比亚迪在自动驾驶方面的发展进度和规划&#xff0c;比亚迪集团董事长王传福直言&#xff1a;“无人驾驶那都是扯淡&#xff0c;弄个虚头巴脑的东西那都是忽悠&#xff0c;它就是一场皇…

Harmony OS 开发指南——源码下载和编译

本文介绍了如何下载鸿蒙系统源码&#xff0c;如何一次性配置可以编译三个目标平台&#xff08;Hi3516&#xff0c;Hi3518和Hi3861&#xff09;的编译环境&#xff0c;以及如何将源码编译为三个目标平台的二进制文件。 坑点总结&#xff1a; 下载源码基本上没有太多坑&#xf…

【添砖Java】java的运算符、注释与关键字

文章目录 运算符算术运算符关系运算符逻辑运算符位运算符移位运算符条件运算符 注释基本规则注释规范 关键字 运算符 算术运算符 基本四则运算符&#xff1a;&#xff08;加&#xff09;、-&#xff08;减&#xff09;、*&#xff08;乘&#xff09;、/&#xff08;除&#x…

ChatGPT实战100例 - (05) ChatGPT 结合 Mermaid 的 Gantt 图表示

文章目录 ChatGPT实战100例 - (05) ChatGPT 结合 Mermaid 的 Gantt 图表示一、需求与思路二、辨析概念三、图形展示四、总结1. 为什么不使用PlantUML&#xff1f;2. Gantt图是这样用的么&#xff1f;3. Gantt图的主要使用场景&#xff1f; ChatGPT实战100例 - (05) ChatGPT 结合…

「数据库、数据库连接池、数据源」这些概念你真的理解了吗?

前言 我学习的过程中&#xff0c;对于连接池和数据源分得不是很清楚&#xff0c;而且我发现有的人将数据库等同于数据源&#xff0c;或者将数据源等同于连接池&#xff0c;实际上这些说法并不准确。 在某次工作中&#xff0c;同事 A 说道&#xff0c;这个数据源不行&#xff0…

常见分布式锁4:zookeeper 瞬时znode节点 + watcher监听机制,ChatGPT回复的解决死锁的方案

原文地址在这里 临时节点具备数据自动删除的功能。当client与ZooKeeper连接和session断掉时&#xff0c;相应的临时节点就会被删除。zk有瞬时和持久节点&#xff0c;瞬时节点不可以有子节点。会话结束之后瞬时节点就会消失&#xff0c;基于zk的瞬时有序节点实现分布式锁&#x…

科技云报到:存储开源,风雨飘摇下“披着羊皮的狼”?

科技云报道原创。 这些年开源界的风风雨雨&#xff0c;时不时撼动着人们的内心。 2022年&#xff0c;俄乌冲突导致全球最大的独立开源软件公司SUSE、美国开源软件巨头Redhat、主流开源容器引擎Docker&#xff0c;纷纷宣布停止与俄罗斯的合作。 而全球最大的开源及私有代码项目…

socket 及 字节序转换(嵌入式学习)

socket 及 字节序转换 socket简介Socket为什么需要Socket&#xff1f;socket类型Socket通信模型 字节序主机字节序到网络字节序网络字节序到主机字节序IP地址转换 socket简介 1、1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口 2、1…

Linux 服务简单优化

硬件优化 处理器&#xff1a;核心数、主频、制程工艺、线程数、缓存等 核心数&#xff1a;1、2、4、6、8、12、24、32等 主频&#xff1a;2.0GHz、2.3GHz等等 制程工艺&#xff1a;22nm、14nm、10nm等等 线程数&#xff1a;1、2 缓存&#xff1a;L1、L2、L3 建议&#xff1a;尽…

Linux用户的分类与家目录,ls、pwd、cd、mkdir、touch、rmdir、rm指令与选项等

Linux中用户的分类与用户的家目录 在Linux当中&#xff0c;用户的分类只分为两类&#xff0c;一类叫做超级用户root&#xff0c;还有就是其他也就是传说中的普通用户。我们刚刚登进去时&#xff0c;默认所处的目录是***/root或者/home/用户名***&#xff0c;比如说/root, /hom…

知识库管理系统对于企业有哪些作用及优势?

知识库管理系统是一种通过集成多种技术手段&#xff0c;将企业内部知识进行收集、整理、存储、分析和共享的信息管理系统。知识库管理系统可以帮助企业管理和利用企业内部的知识&#xff0c;提高企业的创新能力和竞争力。 知识库管理系统的作用 1、促进企业内部知识的流通和共…

无线传感器网络硬件设计简介

无线传感器网络硬件设计简介 无线传感器网络因其巨大的应用前景越来越受到学术界和工业界的广泛关注。本文介绍了无线传感器网络节点的体系结构&#xff0c;分析比较了国内外当前典型的硬件平台&#xff0c;重点讨论了目前无线传感器网络节点常用的处理器、射频芯片、电源和传…

Java IO流

Java IO流 IO就是Intput和Output也就是输入输出&#xff0c;将数据输入到计算机内存的过程叫做输入&#xff0c;从内存读取出来的数据叫做输出。Java的IO流总共有40多个类&#xff0c;他们都是由下个4个抽象类派生出来的&#xff0c;InputStream和Read和OutputStream和Writer。…