当前位置: 首页 > news >正文

Python中容器类型的数据

目录

序列

序列的索引操作

加和乘操作

切片操作

成员测试

列表

创建列表

追加元素

插入元素

替换元素

删除元素

元组

创建元组

元组拆包

集合

创建集合

修改集合

字典

创建字典

修改字典

访问字典视图

遍历字典

若我们想将多个数据打包并且统一管理,应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据,我们称它们为容器类型的数据。

序列

序列是一种可迭代的、元素有序的容器类型的数据。序列包括列表(list)、字符串(str)、元组(tuple)和字节序列(bytes)等。

序列的索引操作

序列中的元素都是有序的,每一个元素都带有序号,这个序号叫作索引。索引有正值索引和负值索引之分。

序列示例:Hello字符串

>>>a='Hello'
>>>a[0]
'H'
>>>a[-5]
'H'
>>>max(a) # max()函数返回最后一个元素
'o'
>>>min(a) # min()函数返回第一个元素
'H'
>>>len(a) # len()函数用于获取序列的长度
5

加和乘操作

加(+)和乘(*)运算符也可以用于序列中的元素操作。加(+) 运算符可以将两个序列连接起来,乘(*)运算符可以将两个序列重复多次。

>>>a='Hello'
>>>a*2
'HelloHello'
>>>a='Hello'+','
'Hello,'
>>>a+='World'
>>>a
'Hello,World'

切片操作

序列的切片(Slicing)就是从序列中切分出小的子序列。切片运算符的语法形式为[start:end:step]。其中,start是开始索引 ,end是结束索引,step是步长(切片时获取的元素的间隔,可以为正整数,也可以为负整数)。

注意:切下的小切片包括start位置的元素,但不包括end位置的元素 ,start和end都可以省略。

>>>a='Hello'
>>>a[1:3]
'el'
>>>a[:3]//省略了开始索引,默认开始索引为0,所以a[:3]和a[0:3]的切片结果是一样的
'Hel'
>>>a[0:3]
'Hel'
>>>a[0:]//省略了结束索引,默认结束索引是序列的长度,即5.所以a[0:]与a[0:5]的切片结果是一样的
'Hello'
>>>a[0:5]
'Hello'
>>>a[:]//省略了开始索引和结束索引
'Hello'
>>>a[1:-1]//使用了负值索引
'ell'

当步长不为1时

>>>a='Hello'
>>>a[1:5]
'ello'
>>>a[1:5:2]
'el'
>>>a[0:3:2]
'Hl'
>>>a[0:3:3]
'H'

成员测试

成员测试运算符有两个:in和not in,in用于测试是否包含某一个元素,not in用于测试是否不包含某一个元素。

>>>a='Hello'
>>>'e' in a
True
>>>'E' not in a
True

列表

列表(list)是一种可变序列类型,我们可以追加、插入、删除和替换列表中的元素。

创建列表

创建列表有两种方法。

1 list(iterable)函数:参数iterable是可迭代对象(字符串、列表、 元组、集合和字典等)。

2 [元素1,元素2,元素3,⋯]:指定具体的列表元素,元素之间以逗号分隔,列表元素需要使用中括号括起来。

>>>[20,10,50,30]
[20,10,50,30]
>>>[] # 创建空列表
[]
>>>['Hello','World',1,2,3] # 创建一个字符串和整数混合的列表
['Hello','World',1,2,3]
>>>a=[10]
>>>a
[10]
>>>a[10,] # 列表的每一个元素后面都跟着一个逗号,但经常省略这个逗号
>>>a
[10]
>>>list('Hello')
['H','e','l','l','o']

追加元素

列表是可变的序列对象,列表可以追加元素。

1 在列表中追加单个元素时,可以使用列表的append(x)方法。

2 在列表中追加多个元素时,可以使用加(+)运算符或列表的extend(x)方法。

>>>list=[20,10,50,30]
>>>list.append(80)
>>>list
[20,10,50,30,80]
>>>list=[20,10,50,30]
>>>t=[1,2,3]
>>>list+=t
>>>list
[20,10,50,30,1,2,3]
>>>list=[20,10,50,30]
>>>list.extend(t)
>>>list
[20,10,50,30,1,2,3]

插入元素

想向列表中插入元素时,可以使用列表的list.insert(i,x)方法, 其中,i指定索引位置,x是要插入的元素。

>>>list=[20,10,50,30]
>>>list.insert(2,80)
>>>list
[20,10,80,50,30]

替换元素

想替换列表中的元素时,将列表下标索引元素放在赋值符号(=) 的左边,进行赋值即可。

>>>list=[20,10,50,30]
>>>list[1]=80
>>>list
[20,80,50,30]

删除元素

想在列表中删除元素时,可使用列表的list.remove(x)方法,如果找到匹配的元素x,则删除该元素,如果找到多个匹配的元素,则只删除第一个匹配的元素。

>>>list=[20,10,80,50,30]
>>>list.remove(80)
>>>list
[20,10,50,30]

元组

元组(tuple)是一种不可变序列类型。

创建元组

创建元组时有两种方法。

1 tuple(iterable)函数:参数iterable是可迭代对象(字符串、列表、元组、集合和字典等)。

2 (元素1,元素2,元素3,⋯):指定具体的元组元素,元素之间以逗号分隔。对于元组元素,可以使用小括号括起来,也可以省略小括号。

>>>21,32,43,45 # 创建一个有4个元素的元组,创建元组时使用小括号把元素括起来或省略
(21,32,43,45)
>>>('Hello','World') # 创建字符串元组
('Hello','World')
>>>('Hello','World',1,2,3) # 创建字符串和整数混合的元组
('Hello','World',1,2,3)
>>>tuple([21,32,43,45])
(21,32,43,45)
>>>t=1, # 创建只有一个元素的元组,元素后面的逗号不能省略
>>>t
(1,)
>>>type(t)
<class 'tuple')
>>>t=(1,)
>>>type(t)
<class 'tuple'>
>>>a=() # 通过()可以创建空元组
>>>type(a)
<class 'tuple'>

元组拆包

创建元组,并将多个数据放到元组中,这个过程被称为元组打包。与元组打包相反的操作是拆包,就是将元组中的元素取出,分别赋值给不同的变量。

>>>s_id,s_name=(102,'张三')
>>>s_id
102
>>>s_name
'张三'

集合

集合(set)是一种可迭代的、无序的、不能包含重复元素的容器类型的数据。

创建集合

序列中的元素是有序的,集合中的元素是无序的,但集合中的元素不能重复。

我们可以通过以下两种方式创建集合。

1 set(iterable)函数:参数iterable是可迭代对象(字符串、列表、 元组、集合和字典等)。

2 {元素1,元素2,元素3,⋯}:指定具体的集合元素,元素之间以逗号分隔。对于集合元素,需要使用大括号括起来。

>>>set('Hello')
{'o','H','e','l'}
>>>{20,15,10,30,20,15}
{10,20,30,15}
>>>b={}
>>>type(b)
<class 'set'>

修改集合

修改集合类似于修改列表,可以向其中插入和删除元素。修改可变集合有如下的常用方法。

add(elem):添加元素,如果元素已经存在,则不能添加,不会抛出错误。

remove(elem):删除元素,如果元素不存在,则抛出错误。

clear():清除集合。

>>>s_set={'张三','李四','王五'}
>>>s_set.add('董六')
>>>s_set
{'王五','张三','李四','董六'}
>>>s_set.remove('李四')
>>>'李四' in s_set
False
>>>s_set.clear()
>>>S_set
set()

字典

字典(dict)是可迭代的、通过键(key)来访问元素的可变的容器类型的数据。

字典由两部分视图构成:键视图和值视图。键视图不能包含重复的元素,值视图能。在键视图中,键和值是成对出现的。

创建字典

我们可以通过以下两种方法创建字典。

1 dict()函数。

2 {key1:value1,key2:value2,...,key_n:value_n}:指定具体的字典键值对,键值对之间以逗号分隔,最后用大括号括起来。

>>>dict({102:'张三',105:'李四',109:'王五'}) # 通过dict()函数创建字典,参数是另外一个字典
{102:'张三',105:'李四',109:'王五'}
>>>dict(((102:'张三'),(105:'李四'),('109:'王五'))) # 通过dict()函数创建字典,参数是一个元组,在这个元组中包含三个只有两个元素的元组
{102:'张三',105:'李四',109:'王五'}
>>>dict([(102,'张三'),(105,'李四'),(109,'王五')]) # 通过dict()函数创建字典,参数是一个列表,在这个列表中包含三个只有两个元素的元组
{102:'张三',105:'李四',109:'王五'}
>>>dict(zip([102,105,109],['张三','李四','王五'])) # 通过zip()函数将两个可迭代对象打包成元组,第一个参数是字典的键,第二个参数是字典值,它们包含的元素个数相同,并且一一对应
{102:'张三',105:'李四',109:'王五'}
>>>dict1={102:'张三',105:'李四',109:'王五'}
>>>dict1
{102:'张三',105:'李四',109:'王五'}

修改字典

字典可以被修改,但都是针对键和值同时操作的,对字典的修改包括添加、替换和删除。

>>>dict1={102:'张三',105:'李四',109:'王五'}
>>>dict[109] # 通过字典键返回对应的值
'王五'
>>>dict[110]='董六' # 通过110键赋值,如果此时在字典中没有110键,则添加110:'董六'键值对
>>>dict1
{102:'张三',105:'李四',109:'王五',110:'董六'}
>>>dict1[109] # 将109键对应的值替换为'张三'
>>>dict1
{102:'张三',105:'李四',109:'张三',110:'董六'}
>>>dict1.pop(105) # 使用字典的pop(key)方法删除键值对,返回删除的值
'李四'
>>>dict1
{102:'张三',109:'张三',110:'董六'}

访问字典视图

我们可以通过字典中的三种方法访问字典视图。

items():返回字典的所有键值对视图。

keys():返回字典键视图。

values():返回字典值视图。

>>>dict1={102:'张三',105:'李四',109:'王五'}
>>>dict1.items()
dict_items([(102:'张三'),(105:'李四'),(109:'王五')])
>>>list(dict1.items())
[(102,'张三'),(105,'李四'),(109,'王五')]
>>>dict1.keys()
dict_keys([102,105,109])
>>>list(dict1.keys())
[102,1055,109]
>>>dict1.values()
dict_values(['张三','李四','王五'])
>>>list(dict1.values())
['张三','李四','王五']

遍历字典

遍历就是从容器中取出每一个元素的过程,在进行序列和集合遍历时使用for循环就可以。但字典有两个视图,在遍历时,可以只遍历值视图,也可以只遍历键视图,还可以同时遍历,这些便利都是通过for循环实现的。

s_dict={102:'张三',105:'李四',109:'王五'}
print('---遍历键---')
for s_id in s_dict.keys():print('学号:'+str(s_id))
print('---遍历值---')
for s_name in s_dict.values():print('学生:'+s_name)
print('---遍历键:值---')
for s_id,s_name in s_dict.items():print('学号:{0}-学生:{1}'.format(s_id,s_name))

输出

---遍历键---
学号:102
学号:105
学号:109
---遍历值---
学生:张三
学生:李四
学生:王五
---遍历键:值---
学号:102-学生:张三
学号:105-学生:李四
学号:109-学生:王五

相关文章:

Python中容器类型的数据

目录 序列 序列的索引操作 加和乘操作 切片操作 成员测试 列表 创建列表 追加元素 插入元素 替换元素 删除元素 元组 创建元组 元组拆包 集合 创建集合 修改集合 字典 创建字典 修改字典 访问字典视图 遍历字典 若我们想将多个数据打包并且统一管理&…...

虚拟机安装Centos8.5

记得看目录哦&#xff01; 附件1. 新建虚拟机2. 安装Centos8.5 附件 安装包自行下载 https://mirrors.aliyun.com/centos/8/isos/x86_64/ 1. 新建虚拟机 2. 安装Centos8.5 启动虚拟机–选择第一个install Centos8.5 记得接收许可证...

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…...

arco design table遇到的一些问题

问题1&#xff1a;不知情就成了树形table table中不知道为啥就多了个树形加号在前面&#xff0c;查找问题后发现&#xff0c;是后端返回的数据中有children&#xff0c;框架中默认对这个参数做了树形结构。 解决办法&#xff1a; 当时没找到取消或者修改字段的属性或方法&…...

Linux系统——文本三剑客

目录 一、grep 1.格式 2.选项 2.1 grep重定向 2.2grep -m 匹配到几次停止 2.3grep -i 忽略大小写 2.4grep -n 显示行号 2.5grep -c 统计匹配行数 2.6grep -A 后几行 2.7grep -C 前后三行 2.8grep -B 前三行 2.9grep -e 或 2.10grep -w 匹配整个单词 2.11grep -r…...

代码随想录算法训练营Day38|动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 动态规划理论基础 什么是动态规划 动态规划的解题步骤 动态规划的debug 509. 斐波那契数 前言 思路 算法实现 方法一&#xff1a;动态规划 方法二&#xff1a;递归法 70. 爬楼梯 前言 思路 算法实现 拓展 746. 使用最小花费爬楼梯 算法实现 总结 动态规划…...

C++中的指针空值nullptr

一、nullptr的引入 在C98中&#xff0c;通常是用NULL或者0对指针变量进行初始化 int* p1 NULL; int* p2 0; NULL其实一个宏&#xff0c;本质是0&#xff0c;在传统C头文件stddef.h中给可以看到如下代码 #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define …...

【Linux网络编程】网络编程套接字(1)

【Linux网络编程】网络编程套接字(1) 目录 【Linux网络编程】网络编程套接字(1)源IP地址和目的IP地址端口号端口号和进程ID的关系 网络通信TCP协议UDP协议网络字节序socket编程接口简单的UDP网络程序 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.1.29 前言&#xff1…...

vite+ts+vue3打包的过程和错误

文章目录 概要vite.config.ts配置tsconfig.json 的配置package.json 的配置路由配置打包打开打包后的文件小结 概要 完成vite的打包&#xff0c;和在本地打开页面 记录一下&#xff0c;vite打包过程中的问题!!! vite.config.ts配置 vite.config.ts配置打包的相关配置 import…...

80.双指针实现删除有序数组中的重复项 II(中等)-面试经典150题

题目 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明…...

基于大数据的B站数据分析系统的设计与实现

摘要&#xff1a;随着B站&#xff08;哔哩哔哩网&#xff09;在国内视频分享平台的崛起&#xff0c;用户规模和数据量不断增加。为了更好地理解和利用这些海量的B站数据&#xff0c;设计并实现了一套基于Python的B站数据分析系统。该系统采用了layui作为前端框架、Flask作为后端…...

机器学习模型预测贷款审批

机器学习模型预测贷款审批 作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&…...

Linux实验记录:使用firewalld

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: RHEL8系统中集成了多款防火墙管理工具&#xf…...

Vue之初识Vue CLI 脚手架

Vue CLI 是Vue 官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 脚手架有什么好处&#xff1f; 1.开箱即用&#xff0c;零配置 2.内置 babel 等工具 3.标准化 使用步骤: 1.全局安装(一次):yarn globaladd vue/cli …...

[Tcpdump] 网络抓包工具使用教程

往期回顾 海思 tcpdump 移植开发详解海思 tcpdump 移植开发详解 前言 上一节&#xff0c;我们已经讲解了在海思平台如何基于静态库生成 tcpdump 工具&#xff0c;本节将作为上一节的拓展内容。 一、tcpdump 简介 「 tcpdump 」是一款强大的网络抓包工具&#xff0c;它基于…...

MongoDB常用命令

3.1 案例需求 存放文章评论的数据存放到MongoDB中&#xff0c;数据结构参考如下&#xff1a; 数据库&#xff1a;articledb 3.2 数据库操作 3.2.1 选择和创建数据库 选择和创建数据库的语法格式&#xff1a; use 数据库名称 如果数据库不存在则自动创建&#xff0c;例如&a…...

强敌环伺:金融业信息安全威胁分析——整体态势

从早期的Zeus和其他以银行为目标的特洛伊木马程序&#xff0c;到现在的大规模分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;再到新颖的钓鱼攻击和勒索软件&#xff0c;金融服务业已成为遭遇网络犯罪威胁最严重的行业之一。金融服务业的重要性不言而喻&#xff0…...

FreeRTOS简介

一 FreeRTOS简介 实时操作系统&#xff08;Real-Time Operating System&#xff0c;RTOS&#xff09;是一种专门设计用于处理实时任务的操作系统。它的主要作用是提供具有严格时间约束的任务调度和资源管理&#xff0c;以满足实时系统对时间的要求。 可分为硬实时和软实时&am…...

51单片机点灯

51单片机点灯 1.点亮LED灯 #include "reg52.h"sbit ledOne P3^7;void main() {//灯亮&#xff0c;给一个P3.7低电平ledOne 0; }给LED1对应标号的P3^7一个低电平&#xff0c;就能点亮LED灯2.LED灯闪烁 #include "reg52.h"sbit ledOne P3^7;void Delay…...

sql注入之union联合注入

一、Union注入 联合查询注入是联合两个表进行注入攻击&#xff0c;使用关键词 union select 对两个表进行联合查询。两个表的字段数要相同&#xff0c;不然会出现报错。列数相同 union 特性是显示两张表 我们就可以吧第一个参数变为------负--的 或者不存在的值 就行了 显示就…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...