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

news2024/11/18 0:19:36

文章目录

  • 序列概念
  • 序列
    • 列表
      • 列表的创建和下标访问
        • 创建
        • 下标
      • 列表的切片操作
      • 列表的遍历
      • 列表的插入操作
      • 列表的查找和删除
      • 列表的拼接
    • 元组
      • 元组的相关操作
  • 字典概念
      • 字典的创建
      • 查找字典中的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] + 10

print(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 = 10
    y = 20
    return x, y


x, 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.coloradmin.cn/o/445303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APIs -- DOM节点操作

1. 日期对象 日期对象&#xff1a;用来表示时间的对象 作用&#xff1a;可以得到当前系统时间 1.1 实例化 在代码中发现了new关键字时&#xff0c;一般将这个操作称为实例化 创建一个时间对象并获取时间&#xff1a;const date new Date(); // 实例化 new// 1.得到当前时…

React语法(N)

文章目录 React简介概述官网特点生态 react学习的说明新的官网全力投入现代React与Hooks React脚手架create-react-app官网创建和启动项目项目结构sass支持 Vite创建和启动项目项目结构常见配置 虚拟DOM什么是虚拟DOM虚拟DOM优缺点优点&#xff1a;缺点&#xff1a; 虚拟DOM实现…

CTF之命令执行常见绕过

命令执行常见绕过 1.空格代替 当我们执行系统命令时&#xff0c;不免会遇到空格&#xff0c;如cat flag.txt&#xff0c;当空格被程序过滤时&#xff0c;便需要利用以下字符尝试代替绕过&#xff1a; < ${IFS} $IFS$9 %09测试如下&#xff1a; $IFS 在 linux 下表示分隔…

增长黑武器|LTD荣获“2023中国工业数字化赋能奖先锋”

​ 2014年&#xff0c;北京 2015年&#xff0c;南昌 2016年&#xff0c;上海 ...... 2022年&#xff0c;南京 2023年&#xff0c;4月21日 由中国生产力促进中心协会数字经济工作委员会提供指导&#xff0c;由托比网主办的“第六届中国工业数字化高峰论坛”在上海举行。本…

力扣sql中等篇练习(十)

力扣sql中等篇练习(十) 1 查询回答率最高的问题 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # count(具体字段)会自动不统计null值 SELECT t1.question_id survey_log FROM (SELECT question_id,count(answer_id)/count(*) rFROM SurveyLogGROUP…

STM32常用的开发工具有哪些

这么多工具&#xff0c;选择困难啊&#xff0c;先列出来&#xff0c;以后有选择了给大家说&#xff0c;对了&#xff0c;2023年还有一个新玩法就是VSCode 本文为大家汇总 STM32 常用的一些开发工具。 IDE&#xff08;集成开发环境&#xff09; IDE&#xff1a;IntegratedDeve…

springboot_模拟01

demo 模拟springboot pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

李沐读论文笔记--大模型时代下做科研的四个思路

大模型时代下做科研的四个思路 0. 视频来源&#xff1a;1. 提高效率&#xff08;更快更小&#xff09;1.1 PEFT介绍(parameter efficient fine tuning)1.2 作者的方法1.3 AIM效果1.3.1AIM 在 K400 数据集上的表现1.3.2AIM 在 Something-Something 数据集、K700 数据集和 Diving…

《程序员面试金典(第6版)》面试题 16.01. 交换数字(位运算符,异或性质)

题目描述 编写一个函数&#xff0c;不用临时变量&#xff0c;直接交换numbers [a, b]中a与b的值。 示例&#xff1a; 输入: numbers [1,2]输出: [2,1] 提示&#xff1a; numbers.length 2-2147483647 < numbers[i] < 2147483647 解题思路与代码 这道题不让使用额外…

spring getway的配置

1. 创建工程 getway-server 2. 添加 pom 依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 3. 添加启动类 4. 添加配置文件&#xff…

【安全防御】IPsec VPN

1.什么是数据认证&#xff0c;有什么用&#xff0c;有哪些实现的技术手段&#xff1f; 在计算机和网络安全领域中&#xff0c;数据认证是指验证数据在传输和存储过程中的完整性、真实性和合法性的过程。数据在传输和存储过程中容易受到数据篡改、损坏或未经授权的访问和修改的…

用Keras单层网络预测银行客户流失率

用Keras单层网络预测银行客户流失率 描述 已知一批客户数据&#xff0c;来预测某个银行的客户是否流失。通过学习历史数据&#xff0c;如果机器能判断出哪些客户很有可能在未来两年内结束在银行的业务&#xff08;这当然是银行所不希望看到的&#xff09;&#xff0c;那么银行…

基于vue+laravel技术框架开发的:PHP不良事件上报系统源码

医院安全&#xff08;不良&#xff09;事件上报系统源码&#xff0c;PHP不良事件上报系统源码 系统定义&#xff1a; 规范医院安全&#xff08;不良&#xff09;事件的主动报告&#xff0c;增强风险防范意识&#xff0c;及时发现医院不良事件和安全隐患&#xff0c;将获取的医…

成都建博会:家居行业数字营销金点子 句句戳心坎,先收藏

四月&#xff0c;不仅是人间最美天&#xff0c;也是第二季度的开始。随着气温上升&#xff0c;行业进入了活跃期。对于西南地区的家居行业从业者来说&#xff0c;来一趟一年一度的成都建博会&#xff0c;总能获得无尽的灵感&#xff0c;对后续更加充满期待。而与同行的交流&…

美国主机常见的安全漏洞与防范方法详解

在今天的数字时代&#xff0c;保护计算机系统和数据安全至关重要。不幸的是&#xff0c;网络安全问题在过去几年中已经成为全球性的问题。攻击者利用各种漏洞和技巧来入侵系统&#xff0c;以窃取敏感信息、加密数据或者破坏系统。在本文中&#xff0c;我们将探讨美国主机常见的…

HTML5 语义元素

文章目录 HTML5 语义元素什么是语义元素?浏览器支持HTML5中新的语义元素HTML5 \<section> 元素HTML5 \<article> 元素HTML5 \<nav> 元素HTML5 \<aside> 元素HTML5 \<header> 元素HTML5 \<footer> 元素HTML5 \<figure> 和 \<figc…

Git Commit message 编写规范

介绍 在 Git 中&#xff0c;每次提交代码&#xff0c;都要写 Commit message&#xff08;提交说明&#xff09;&#xff0c;否则就不允许提交。这个操作将通过 git commit 完成。 git commit -m "hello world"上面代码的-m参数&#xff0c;就是用来指定 commit mes…

你怎么知道我什么都不会

文章目录 查询的存储过程增删改的存储过程返回拼音缩写自动填充拼音缩写的触发器销售完整销售业务存储过程 实现查询销售记录及销售明细退货业务实现营业员对当天销售的扎帐处理存储过程 阿巴阿巴高可用 阿玛阿玛碰运气 文心一言 耶耶耶耶耶 查询的存储过程 创建货品信息查…

kafka--python

文章目录 1、kafka是什么2、docker上部署kafka3、在kafka容器内部署python&#xff0c;并跑通生产者-消费者简单代码4、最新接口4.1、kafka_config.py4.2、kafka_interface.py4.3、run.py4、测试 1、kafka是什么 Producer&#xff1a;即生产者&#xff0c;消息的产生者&#xf…

PICO一方打造:VR音游《闪韵灵境》体验

​《闪韵灵境》本周正式上线&#xff0c;作为PICO一方工作室的首款作品&#xff0c;不少玩家对此寄予厚望。即便是作为一个轻轻度VR音游的用户&#xff0c;经过简短体验&#xff0c;我也发现了闪韵灵境和目前热门的Beat Saber之间的一些差异点。以下是我在简短体验后的一些看法…