Python-----容器的介绍以及操作

1.列表和元组

        1.列表是什么, 元组是什么:

        编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可.

但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表

列表是一种让程序猿在代码中批量表示/保存数据的方式

就像我们去超市买辣条, 如果就只是买一两根辣条, 那咱们直接拿着辣条就走了. 但是如果一次买个十根八根的, 这个时候用手拿就不好拿, 超市老板就会给我们个袋子. 这个袋子, 就相当于 列表

元组和列表相比, 是非常相似的, 只是列表中放哪些元素可以修改调整, 元组中放的元素是创建元组的时 候就设定好的, 不能修改调整.

2.创建列表

        创建列表主要有两种方式  [ ] 表示一个空的列表。

alist = [ ]alist = list() 
print(type(alist))

如果需要往里面设置初始值, 可以直接写在 [ ] 当中

可以直接使用 print 来打印 list 中的元素内容.

alist = [1, 2, 3, 4]print(alist)

列表中存放的元素允许是不同的类型. (这一点和 C++ Java 差别较大).

alist = [1, 'hello', True]print(alist)

因为 list 本身是 Python 中的内建函数, 不宜再使用 list 作为变量名, 因此命名为 alist

3.访问下标

        可以通过下标访问操作符 [ ] 来获取到列表中的任意元素.

        我们把 [ ] 中填写的数字, 称为 下标 或者 索引 .

alist = [1, 2, 3, 4]print(alist[2])

注意: 下标是从 0 开始计数的, 因此下标为 2 , 则对应着 3 这个元素.

通过下标不光能读取元素内容, 还能修改元素的值.

alist = [1, 2, 3, 4]alist[2] = 100print(alist)

如果下标超出列表的有效范围, 会抛出异常.

alist = [1, 2, 3, 4]print(alist[100])

因为下标是从 0 开始的, 因此下标的有效范围是 [0, 列表长度 - 1]. 使用 元素个数.

alist = [1, 2, 3, 4]print(len(alist))

下标可以取负数. 表示 "倒数第几个元素"

                        alist[-1] 相当于 alist[len(alist) - 1]

4.切片操作

通过下标操作是一次取出里面第一个元素.

通过切片, 则是一次取出一组连续的元素, 相当于得到一个 子列表

使用 [ : ] 的方式进行切片操作.

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

                

alist[1:3] 中的 1:3 表示的是 [1, 3) 这样的由下标构成的前闭后开区间. 也就是从下标为 1 的元素开始(2), 到下标为 3 的元素结束(4), 但是不包含下标为 3 的元素. 所以最终结果只有 2, 3

2.切片操作中可以省略前后边界

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

# 省略后边界, 表示获取到列表末尾

# 省略前边界, 表示从列表开头获取

# 省略两个边界, 表示获取到整个列表.

3.切片操作还可以指定 "步长" , 也就是 "每访问一个元素后, 下标自增几步"

alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(alist[::1])print(alist[::2])print(alist[::3])print(alist[::5])

4.切片操作指定的步长还可以是负数, 此时是从后往前进行取元素. 表示 "每访问一个元素之后, 下标自 减几步

 alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(alist[::-1])print(alist[::-2])print(alist[::-3])print(alist[::-5])

5.如果切片中填写的数字越界了, 不会有负面效果. 只会尽可能的把满足条件的元素过去到

alist = [1, 2, 3, 4]print(alist[100:200])

5.遍历列表元素

"遍历" 指的是把元素一个一个的取出来, 再分别进行处理.

        1.最简单的办法就是使用 for 循环

alist = [1, 2, 3, 4]for elem in alist:print(elem)

2.也可以使用 for 按照范围生成下标, 按下标访问

alist = [1, 2, 3, 4]for i in range(0, len(alist)):print(alist[i])

3.还可以使用 while 循环. 手动控制下标的变化

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

6.新增元素

        1.使用 append 方法, 向列表末尾插入一个元素(尾插).

alist = [1, 2, 3, 4]alist.append('hello')print(alist)

2.使用 insert 方法, 向任意位置插入一个元素

        insert 第一个参数表示要插入元素的下标.

alist = [1, 2, 3, 4]alist.insert(1, 'hello')print(alist)

PS: 什么是 "方法" (method) 方法其实就是函数. 只不过函数是独立存在的, 而方法往往要依附于某个 "对象". 像上述代码 alist.append , append 就是依附于 alist, 相当于是 "针对 alist 这个列表, 进行尾插操 作".

7.查找元素

1.使用 in 操作符, 判定元素是否在列表中存在. 返回值是布尔类型.

alist = [1, 2, 3, 4]print(2 in alist)print(10 in alist)

2.使用 index 方法, 查找元素在列表中的下标. 返回值是一个整数. 如果元素不存在, 则会抛出异常

alist = [1, 2, 3, 4]print(alist.index(2))print(alist.index(10))

8.删除元素

1.使用 pop 方法删除最末尾元素

alist = [1, 2, 3, 4]alist.pop()print(alist)

2.pop 也能按照下标来删除元素

alist = [1, 2, 3, 4]alist.pop(2)print(alist)

        结果为 1 2 4

3.使用 remove 方法, 按照值删除元素

alist = [1, 2, 3, 4]alist.remove(2)print(alist)

9.连接列表

1.使用 + 能够把两个列表拼接在一起.(此处的 + 结果会生成一个新的列表. 而不会影响到旧列表的内容

alist = [1, 2, 3, 4]blist = [5, 6, 7]print(alist + blist)

2.使用 extend 方法, 相当于把一个列表拼接到另一个列表的后面.(a.extend(b) , 是把 b 中的内容拼接到 a 的末尾. 不会修改 b, 但是会修改 a.

alist = [1, 2, 3, 4]blist = [5, 6, 7]alist.extend(blist)print(alist)print(blist)

10.关于元组

元组的功能和列表相比, 基本是一致的. 元组使用 ( ) 来表示.

atuple = ( )atuple = tuple()

元组不能修改里面的元素, 列表则可以修改里面的元素!!!!!

因此, 像读操作,比如访问下标, 切片, 遍历, in, index, + 等, 元组也是一样支持的. 但是, 像写操作, 比如修改元素, 新增元素, 删除元素, extend 等, 元组则不能支持

另外, 元组在 Python 中很多时候是默认的集合类型. 例如, 当一个函数返回多个值的时候.

def getPoint():return 10, 20result = getPoint()print(type(result))

此处的 result 的类型, 其实是元组

10.1.问题来了, 既然已经有了列表, 为啥还需要有元组

        元组相比于列表来说, 优势有两方面:

                你有一个列表, 现在需要调用一个函数进行一些处理. 但是你有不是特别确认这个函数是否会 把你的列表数据弄乱. 那么这时候传一个元组就安全很多.

                我们马上要讲的字典, 是一个键值对结构. 要求字典的键必须是 "可hash对象" (字典本质上也 是一个hash表). 而一个可hash对象的前提就是不可变. 因此元组可以作为字典的键, 但是列表 不行

11.列表以及元组的总结

                列表和元组都是日常开发最常用到的类型. 最核心的操作就是根据 [ ] 来按下标操作. 在需要表示一个 "序列" 的场景下, 就可以考虑使用列表和元组. 如果元素不需要改变, 则优先考虑元组. 如果元素需要改变, 则优先考虑列表.

12.字典

        12.1字典是什么?

                字典是一种存储 键值对 的结构. 啥是键值对? 这是计算机/生活中一个非常广泛使用的概念. 把 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值.

                举个栗子, 学校的每个同学, 都会有一个唯一的学号. 知道了学号, 就能确定这个同学. 此处 "学号" 就是 "键", 这个 "同学" 就是 "值"

12.2创建字典

        创建一个空的字典. 使用 { } 表示字典

a = { }b = dict()print(type(a))print(type(b))

也可以在创建的同时指定初始值

键值对之间使用 , 分割, 键和值之间使用 : 分割. (冒号后面推荐加一个空格).

使用 print 来打印字典内容

student = { 'id': 1, 'name': 'zhangsan' }print(student)

为了代码更规范美观, 在创建字典的时候往往会把多个键值对, 分成多行来书写.

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

最后一个键值对, 后面可以写 , 也可以不写.

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

13.查找 key

        1.使用 in 可以判定 key 是否在 字典 中存在. 返回布尔值

student = {'id': 1,'name': 'zhangsan',}print('id' in student)print('score' in student)

使用 [ ] 通过类似于取下标的方式, 获取到元素的值. 只不过此处的 "下标" 是 key. (可能是整数, 也 可能是字符串等其他类型).

student = {'id': 1,'name': 'zhangsan',}print(student['id'])print(student['name'])

如果 key 在字典中不存在, 则会抛出异常.

student = {'id': 1,'name': 'zhangsan',}print(student['score'])

13.1.新增/修改元素

        1.使用 [ ] 可以根据 key 来新增/修改 value

        如果 key 不存在, 对取下标操作赋值, 即为新增键值对

student = {'id': 1,'name': 'zhangsan',}student['score'] = 90print(student)

2.如果 key 已经存在, 对取下标操作赋值, 即为修改键值对的值

student = {'id': 1,'name': 'zhangsan','score': 80}student['score'] = 90print(student)

13.2.删除元素

1.使用 pop 方法根据 key 删除对应的键值对.

student = {'id': 1,'name': 'zhangsan','score': 80}student.pop('score')print(student)

13.3.遍历字典元素

        直接使用 for 循环能够获取到字典中的所有的 key, 进一步的就可以取出每个值了.

student = {'id': 1,'name': 'zhangsan','score': 80}for key in student:print(key, student[key])

13.4.取出所有 key 和 value

        使用 keys 方法可以获取到字典中的所有的 key

student = {'id': 1,'name': 'zhangsan','score': 80}print(student.keys())

        此处 dict_keys 是一个特殊的类型, 专门用来表示字典的所有 key. 大部分元组支持的操作对于 dict_keys 同样适用

        使用 values 方法可以获取到字典中的所有 value

student = {'id': 1,'name': 'zhangsan','score': 80}print(student.items())

此处 dict_items 也是一个特殊的类型, 和 dict_keys 类似.

13.5.合法的 key 类型

不是所有的类型都可以作为字典的 key.

字典本质上是一个 哈希表, 哈希表的 key 要求是 "可哈希的", 也就是可以计算出一个哈希值

可以使用 hash 函数计算某个对象的哈希值.

但凡能够计算出哈希值的类型, 都可以作为字典的 key.

print(hash(0))print(hash(3.14))print(hash('hello'))print(hash(True))print(hash(())) #()是一个空的元组

        列表无法计算哈希值

print(hash([1, 2, 3]))

        字典也无法计算哈希值

print(hash({ 'id': 1 }))

14.总结

字典也是一个常用的结构. 字典的所有操作都是围绕 key 来展开的. 需要表示 "键值对映射" 这种场景时就可以考虑使用字典.

以下就是我C++ 入门python的一些基础语法的知识,欢迎兄弟们品尝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9406.shtml

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

相关文章

论文解读--High-resolution Automotive Radar Point Cloud Imaging and Processing

高分辨汽车雷达点云成像和处理 摘要 汽车雷达具有体积小、硬件成本低、全天候工作、高分辨率等公认的优点&#xff0c;是高级驾驶辅助系统(ADAS)必不可少的一类重要传感器。然而&#xff0c;低角度分辨率和低成像性能的限制很难满足下一阶段ADAS的需要。新兴的4D成像雷达采用多…

SSC369G 双4K高性价比AI IPC方案

一、方案描述 SSC369G 双4K高性价比AI IPC方案采用主芯片SSC369G&#xff0c;内核为CA55四核最高主频为1.5Ghz处理器。SOC内置集成一个64位的四核RISC处理器&#xff0c;先进的图像信号处理器&#xff08;ISP&#xff09;&#xff0c;高性能的H.265/H.264/MJPEG视频编解码器&a…

每日OJ题_记忆化搜索⑤_力扣329. 矩阵中的最长递增路径

目录 力扣329. 矩阵中的最长递增路径 解析代码1_爆搜递归&#xff08;超时&#xff09; 解析代码2_记忆化搜索 力扣329. 矩阵中的最长递增路径 329. 矩阵中的最长递增路径 难度 困难 给定一个 m x n 整数矩阵 matrix &#xff0c;找出其中 最长递增路径 的长度。 对于每…

Linux下多线程相关概念

thread 1.什么是线程1.1 线程优缺点1.2 线程异常1.3 线程用途 2. 进程和线程区别3. 线程控制3.1 POSIX线程库3.2 pthread_create()3.3 线程ID3.4 线程ID地址空间布局pthread_self() 3.5 线程终止pthread_exit函数pthread_cancle函数 3.6 线程等待3.7 分离线程__thread修饰全局变…

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) &#xff1f;① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…

如何利用SSL证书让IP实现HTTPS安全访问

在互联网日益发展的今天&#xff0c;数据安全与隐私保护成为了用户和企业共同关注的焦点。HTTPS&#xff08;超文本传输安全协议&#xff09;作为一种广泛采用的安全通信协议&#xff0c;通过加密数据传输&#xff0c;为网站访问提供了安全保障。然而&#xff0c;要实现HTTPS访…

uniapp百度地图聚合

// loadBMap.js ak 百度key export default function loadBMap(ak) {return new Promise((resolve, reject) > {//聚合API依赖基础库,因此先加载基础库再加载聚合APIasyncLoadBaiduJs(ak).then(() > {// 调用加载第三方组件js公共方法加载其他资源库// 加载聚合API// Ma…

Oracle数据库如何插入平方(²)立方(³)字符

第一步&#xff1a;创建数据表&#xff0c;字段一定要是NVARCHAR2类型的 第二步&#xff0c;插入数据用 unistr(1\00b3) 形式的写法 00b3 代表m&#xff0c;00b2代表㎡ SELECT * FROM TESTABC; UPDATE TESTABC set NAME1unistr(1\00b3); UPDATE TESTABC set NAME2unistr(2\00b2…

【LLM多模态】MiniGPT4模型结构和训练流程

note 图生文应用场景&#xff1a;比如电商领域根据产品图像生成产品描述、娱乐领域中根据电影海报生成电影介绍等MiniGPT-4将预训练的大语言模型和视觉编码器参数同时冻结&#xff0c;只需要单独训练线性投影层&#xff0c;使视觉特征和语言模型对齐。MiniGPT4的视觉编码器&am…

centos 8.5 Node v20.12.2 npm 安装及环境配置 配置淘宝最新镜像地址

1下载&#xff1a;Node.js — Download Node.js 2文件上传到服务器 rootlocalhost software]# tar xvf node-v20.12.2-linux-x64.tar.xz [rootlocalhost software]# mv node-v20.12.2-linux-x64/ /usr/local/node [rootlocalhost software]# vim /etc/profile export PA…

VSCode:设置搜索时的排除目录

VSCode搜索时默认会搜索目录下所有文件 $ tree . ├── a.c ├── m.c └── x └── b.c //a.c #include <stdio.h> #include <string.h>int main() {char s[] "hello\n";fprintf(stdout, s, strlen(s));return 0; } //m.c #include <stdio…

【LSTM】LSTM网络及参数学习笔记

图1 LSTM模型结构可视化 [6]. 图2 LSTM cell结构说明 图3 LSTM cell和num_units说明 [4]. 图4 LSTM的网络结构 1. LSTM 是对一个LSTM层的抽象&#xff0c;可以看成是由多个LSTM cell组成&#xff0c;是包含时间步的一个网络 2. LSTM cell 图2是LSTM在时间步上的结构&#xf…

【硬件开发】原型设计对于成功产品开发重要性及常见阶段

电子产品的设计与开发始于原型制作阶段。这些原型虽可能与最终产品极为相似&#xff0c;但总带有实验性质&#xff0c;因为电子原型的制作过程包括对新概念、新思想及新解决方案的测试。虽然存在出错的风险&#xff0c;跳过这一阶段可能会导致不必要的开支。不擅长电子硬件设计…

2024年想要开一家抖音小店,需要多少钱?一篇详解!

大家好&#xff0c;我是电商糖果 随着抖音卖货的持续火爆&#xff0c;抖音小店也成了电商行业讨论度最大的项目之一。 不少朋友都想知道&#xff0c;如果今年开抖音小店大概需要多少钱。 糖果做小店的时间也比较长&#xff0c;也经营了多家小店。 对于开一家抖音小店需要多…

多规格产品应该如何设置呢?

今天一用户从供应商手中拿到产品价目表&#xff0c;但是设置起来蒙圈了&#xff0c;接下来我们就一起设置一下吧&#xff5e; 一、产品价格表 我们通过供应商手中拿到产品价目表是这个样子的&#xff1a; 我们可以看到此产品的销售客价根据不同地区导致的价格不同&#xff0…

ABAP小技巧汇总(自用)

1.TIMESTAMP搜索帮助 PARAMETERS:p_begin TYPE ty_screen-date_begiu MATCHCODE OBJECT cpe_timestamp, "开始时间戳p_end TYPE ty_screen-date_end MATCHCODE OBJECT cpe_timestamp. "结束时间戳 效果&#xff1a;

Git笔记-常用指令

Git笔记-常用指令 一、概述二、仓库管理二、缓存区操作1. 添加文件到缓存区2. 取消缓存文件3. 忽略列表 三、日志状态信息四、分支操作五、六、 一、概述 这里记录一些git常用的指令。 二、仓库管理 # 本地仓库初始化 git init# 克隆仓库 git clone git_url # git clone ht…

win11个性化锁屏界面怎么关闭?

win11个性化锁屏界面关闭方法对于win11用户来说&#xff0c;关闭个性化锁屏界面是一个常见问题。本文将由php小编苹果详细介绍如何执行此操作&#xff0c;分步指导并提供操作截图。继续阅读以了解具体步骤。 win11个性化锁屏界面关闭方法 第一步&#xff0c;点击底部Windows图…

python数据分析常用基础语法

Python语言基础——语法基础 前言一、变量的介绍与使用变量的介绍变量命名规则变量的使用拓展 二、标识符标识符命名命名规则注意事项 三、数据类型数据类型的介绍数据类型的查看示例 四、输入与输出输入和输出的介绍format格式化输出占位符 五、代码缩进与注释代码缩进 前言 …

【论文速读】| LLM4FUZZ:利用大语言模型指导智能合约的模糊测试

本次分享论文&#xff1a;LLM4FUZZ: Guided Fuzzing of Smart Contracts with Large Language Models 基本信息 原文作者&#xff1a;Chaofan Shou, Jing Liu, Doudou Lu, Koushik Sen 作者单位&#xff1a;加州大学伯克利分校&#xff0c;加州大学欧文分校&#xff0c;Fuzz…