Python入门到精通(五)——Python数据容器

news2024/11/15 13:31:52

Python数据容器

前言

一、list 列表

1、定义

2、列表的下标索引

3、常用操作

 4、列表的遍历

二、tuple 元组

1、定义

2、常用操作

三、str 字符串

1、定义

2、常用操作

四、容器序列的切片

五、set 集合

1、定义

​编辑

2、常用操作

六、dict 字典、映射

1、定义

2、常用操作

七、总结

1、数据容器特点对比

2、通用功能


前言

1、定义:一种可以存储多个元素的Python数据类型

2、类型:list(列表)、tuple(元组)、str(字符串)、set(集合)、dict(字典)

一、list 列表

1、定义

  • 列表内的每一个数据,称之为元素
  • [ ] 作为标识
  • 列表内每一个元素之间用, 逗号隔开
  • 列表可以一次存储多个数据,且可以为不同的数据类型支持嵌套
  • 数据是有序存储的(有下标序号)
  • 允许重复数据存在
  • 可以修改(增加或删除元素等)

代码示例

# 定义一个列表
my_list1 = ["momo_via", 2024, True]
print(my_list1)  # ['momo_via', 2024, True]
print(type(my_list1))  # <class 'list'>
# 定义一个嵌套的列表
my_list2 = ["CSDN", my_list1]
print(my_list2)  # ['CSDN', ['momo_via', 2024, True]]
print(type(my_list2))  # <class 'list'>

2、列表的下标索引

  • 列表[下标],即可取出
  • 列表的每一个元素,都有编号称之为下标索引
  • 从前向后的方向,编号从0开始递增
  • 从后向前的方向,编号从-1开始递减

嵌套列表

代码示例

# 列表的下标索引
# 正向
print(my_list1[0])  # momo_via
# 反向
print(my_list1[-1])  # True
# 取出嵌套列表的元素
print(my_list2[-1][0])  # momo_via

3、常用操作

编号

使用方式

作用

1

列表.append(元素)

向列表中追加一个元素

2

列表.extend(容器)

将数据容器的内容依次取出,追加到列表尾部

3

列表.insert(下标元素)

在指定下标处,插入指定的元素

4

del 列表[下标]

删除列表指定下标元素

5

列表.pop(下标)

除列表指定下标元素

6

列表.remove(元素)

从前向后,删除此元素第一个匹配项

7

列表.clear()

清空列表

8

列表.count(元素)

统计此元素在列表中出现的次数

9

列表.index(元素)

查找指定元素在列表的下标

找不到报错ValueError

10

len(列表)

统计容器内有多少元素

代码示例

# 列表的常用方法
# 列表的查询  列表.index(元素)
my_list = ["momo_via", 2024, True]
print(my_list.index("momo_via"))  # 0
# 修改指定位置的值
my_list[0] = "CSDN"
print(my_list)  # ['CSDN', 2024, True]
# 插入元素  列表.insert(下标,元素)
my_list.insert(1, "best")
print(my_list)  # ['CSDN', 'best', 2024, True]
# 追加单个元素(尾部) 列表.append(元素)
my_list.append("python")
print(my_list)  # ['CSDN', 'best', 2024, True, 'python']
# 追加一批元素  列表.extend(元素)
my_list3 = [1, 2, 3]
my_list.extend(my_list3)
print(my_list)  # ['CSDN', 'best', 2024, True, 'python', 1, 2, 3]
# 删除列表元素
# del 列表
del my_list[3]
print(my_list)  # ['CSDN', 'best', 2024, 'python', 1, 2, 3]
# 列表.pop(下标) 取出元素后删除
ele = my_list.pop(3)
print(f"列表元素{my_list},被取出的元素是:{ele}")  # 列表元素['CSDN', 'best', 2024, 1, 2, 3],被取出的元素是:python
# 删除某元素在列表中的第一个匹配项
my_list = ['CSDN', 'CSDN', 'best', 2024, 'CSDN']
my_list.remove('CSDN')
print(my_list)  # ['CSDN', 'best', 2024, 'CSDN']
# 清空列表
my_list.clear()
print(my_list)  # []
# 统计列表内某元素的数量
my_list = ['CSDN', 'CSDN', 'best', 2024, 'CSDN']
count = my_list.count('CSDN')
print(count)  # 3
# 统计列表中全部的元素数量
count = len(my_list)
print(count)  # 5

 4、列表的遍历

                                          可以使用while循环和for循环

代码示例

while 循环

# while 循环
def list_while():
    """
    使用while循环遍历列表
    :return: None
    """
    my_list = ['CSDN', 'best', 2024, 'python']
    # 循环控制变量通过下标索引来控制,默认0
    # 每一次索引将下标变量 +1
    index = 0
    while index<len(my_list):
        ele = my_list[index]
        print(ele)
        index += 1


list_while()

for循环

# for 循环
def list_for():
    """
    使用for循环遍历列表
    :return: None
    """
    my_list = ['CSDN', 'best', 2024, 'python']
    # 循环控制变量通过下标索引来控制,默认0
    # 每一次索引将下标变量 +1
    for index in my_list:
        print(index)

list_for()

二、tuple 元组

1、定义

  • 定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型
  • 元组只有一个数据,这个数据后面要添加逗号
  • 元组也支持嵌套
  • 不可以修改元组
  • 可以修改元组内的list的内容(修改元素、增加、删除、反转等)

  • 可以使用for循环和while循环遍历

     

代码示例

# 定义元祖
t1 = ("momo_via", 2024, True)
t2 = ()
t3 = tuple()
t4 = ("csdn",)  # 单个元素的元组后面要加一个逗号
print(type(t1))
print(type(t2))
print(type(t3))
print(type(t4))
# 嵌套元组
t5 = (1, 2, 3)
t6 = (t1, t5)
print(t6)  # (('momo_via', 2024, True), (1, 2, 3))
# 下标索引取内容
print(t6[0][1])  # 2024

2、常用操作

编号

方法

作用

1

index()

查找某个数据,如果数据存在返回对应的下标,否则报错

2

count()

统计某个数据在当前元组出现的次数

3

len(元组)

统计元组内的元素个数

代码示例

# 元组的使用
t7 = ("momo_via", 2024, True, 2024, "csdn")
# index
print(t7.index(2024))  # 1
# count
print(t7.count(2024))  # 2
# len
print(len(t7))  # 5
# while 循环遍历
index = 0
while index < len(t7):
    print(t7[index])
    index += 1
# for 循环遍历
for i in t7:
    print(i)

三、str 字符串

1、定义

  • 从前向后,下标从0开始
  • 从后向前,下标从-1开始
  • 无法修改,如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改
  • 支持while循环和for循环
  • 只可以存储字符串
  • 允许重复字符串存在

2、常用操作

编号

操作

说明

1

字符串[下标]

根据下标索引取出特定位置字符

2

字符串.index(字符串)

查找给定字符的第一个匹配项的下标

3

字符串.replace(字符串1, 字符串2)

将字符串内的全部字符串1,替换为字符串2

不会修改原字符串,而是得到一个新的

4

字符串.split(字符串)

按照给定字符串,对字符串进行分隔

不会修改原字符串,而是得到一个新的列表

5

字符串.strip()

字符串.strip(字符串)

移除首尾的空格和换行符或指定字符串

6

字符串.count(字符串)

统计字符串内某字符串的出现次数

7

len(字符串)

统计字符串的字符个数

 代码示例

my_str = "CSDN IS BEST"
# 通过下标索引取值
print(my_str[-1])  # T
# index  索引
print(my_str.index("IS"))  # 5
# replace 替换
new_my_str = my_str.replace("BEST", '最好的')
print(new_my_str)
# split 分割
print(my_str.split(' '))  # ['CSDN', 'IS', 'BEST']
# strip 规整操作
my_str = "   CSDN IS BEST   "
# 默认去除前后空格
print(my_str.strip())  # "CSDN IS BEST"
# 统计某字符出现的次数
print(my_str.count("S"))  # 3
# 统计字符串的长度
print(len(my_str))  # 18

四、容器序列的切片

  • 内容连续、有序,可使用下标索引的一类数据容器
  • 列表、元组、字符串,均可以可以视为序列。
  • 序列[起始:结束:步长]

起始可以省略,省略从头开始

结束可以省略,省略到尾结束

步长可以省略,省略步长为1(可以为负数,表示倒序执行)

代码示例

# 对list进行切片,从1开始,4结束,步长为1
my_list = [0,1,2,3,4,5,6]
# 步长默认为1 可以省略不写
print(my_list[1:4]) # [1, 2, 3]
# 对tuple进行切片,从头开始,到最后结束,步长为1
my_tuple = (0,1,2,3,4,5,6)
# 起始和结束可以不写,默认头和尾,步长默认1
print(my_tuple[:])  # (0, 1, 2, 3, 4, 5, 6)
# 对str进行切片,从头开始,到最后结束,步长为2
my_str = "01234567"
print(my_str[::2])  # 0246
# 对str进行切片,从头开始,到最后结束,步长为-1
# 等同于序列反转
print(my_str[::-1])  # 76543210
# 对列表进行切片,从3开始,到1结束,步长为-1
print(my_list[3:1:-1])  # [3, 2]
# 对元组进行切片,从头开始,到尾结束,步长为-2
print(my_tuple[::-2])  # (6, 4, 2, 0)

五、set 集合

1、定义

  • 支持 for循环,不支持while循环
  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 可以修改(增加或删除元素等)

2、常用操作

编号

操作

说明

1

集合.add(元素)

集合内添加一个元素

2

集合.remove(元素)

移除集合内指定的元素

3

集合.pop()

从集合中随机取出一个元素

4

集合.clear()

将集合清空

5

集合1.difference(集合2)

得到一个新集合,内含2个集合的差集

原有的2个集合内容不变

6

集合1.difference_update(集合2)

在集合1中,删除集合2中存在的元素

集合1被修改,集合2不变

7

集合1.union(集合2)

得到1个新集合,内含2个集合的全部元素

原有的2个集合内容不变

8

len(集合)

得到一个整数,记录了集合的元素数量

代码示例

# 定义
my_set = {"CSDN", "python", 2024}
my_set2 = set()
# 添加新元素
my_set.add("momo_via")
print(my_set)  # {2024, 'momo_via', 'python', 'CSDN'}
# 移除元素
my_set.remove(2024)
print(my_set)  # {'python', 'momo_via', 'CSDN'}
# 随机取出一个元素
print(my_set.pop())  # CSDN
# 清空集合
print(my_set.clear())  # None
# 取两个集合的差集
my_set = {"CSDN", "python", 2024}
my_set2 = {"CSDN", "momo_via", 2024}
print(my_set.difference(my_set2))  # {'python'}
# 消除两个集合的差集
my_set.difference_update(my_set2)
print(my_set)  # {'python'}
print(my_set2)  # {2024, 'CSDN', 'momo_via'}
# 两个集合合并为一个
print(my_set.union(my_set2))  # {'python', 'CSDN', 2024, 'momo_via'}
# 统计集合元素数量
print(len(my_set))  # 1
# 集合的遍历
# 不支持下标索引,所以不能用while
for i in my_set2:
    print(i)  # 2024 CSDN momo_via

六、dict 字典、映射

1、定义

  • 使用{ }存储原始,每一个元素是一个键值对
  • 每一个键值对包含Key和Value(用冒号分隔)
  • 键值对之间使用逗号分隔
  • Key和Value可以是任意类型的数据(key不可为字典)
  • 可以容纳多个数据
  • 可以通过Key获取到Value,Key不可重复(重复会覆盖)
  • 不支持下标索引
  • 可以修改(增加或删除更新元素等)
  • 支持for循环,不支持while循环

代码示例

# 定义字典
my_dict = {"momo_via": 24, "csdn": 2024}
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
# 基于key取value
print(my_dict["csdn"])  # 2024
# 字典的嵌套
stu_score = {
    "张三": {
        "语文": 80,
        "数学": 98,
        "英语": 92,
    },
    "李四": {
        "语文": 95,
        "数学": 88,
        "英语": 85,
    }
}
print(stu_score["张三"]["语文"])  # 80
# 新增元素
stu_score = {
    "张三": 88,
    "李四": 95
}
stu_score["王二"] = 90
print(stu_score)  # {'张三': 88, '李四': 95, '王二': 90}
# 更新元素
stu_score["王二"] = 85
print(stu_score)  # {'张三': 88, '李四': 95, '王二': 85}
# 删除元素
stu_score.pop("王二")
print(stu_score)  # {'张三': 88, '李四': 95}
# 清空元素
print(stu_score.clear())  # None
# 获取全部的key
stu_score = {
    "张三": 88,
    "李四": 95
}
keys = stu_score.keys()
print(keys)  # dict_keys(['张三', '李四'])
# 遍历字典
# 通过获取到全部的key
for i in keys:
    print(i)
    print(stu_score[i])
# for 循环
for i in stu_score:
    print(i)
    print(stu_score[i])
# 字典元素个数
print(len(stu_score))  # 2

2、常用操作

编号

操作

说明

1

字典[Key]

获取指定Key对应的Value

2

字典[Key] = Value

添加或更新键值对

3

字典.pop(Key)

取出Key对应的Value并在字典内删除此Key的键值对

4

字典.clear()

清空字典

5

字典.keys()

获取字典的全部Key,可用于for循环遍历字典

6

len(字典)

计算字典内的元素数量

练习题

代码示例

# 组织字典记录数据
info_dict = {
    '王力红': {
        "部门": "科技部",
        "工资": 3000,
        "级别": 1
    },
    '周杰轮': {
        "部门": "市场部",
        "工资": 5000,
        "级别": 2
    },
    '林俊结': {
        "部门": "市场部",
        "工资": 7000,
        "级别": 3
    },
    '张雪有': {
        "部门": "科技部",
        "工资": 4000,
        "级别": 1
    },
    '刘德滑': {
        "部门": "市场部",
        "工资": 6000,
        "级别": 2
    },
}
# for 循环遍历字典
for name in info_dict:
    # if 条件判断符合条件员工
    if info_dict[name]["级别"] == 1:
        # 升职加薪操作
        # 获取到员工的信息字典
        employee_info_dict = info_dict[name]
        # 修改员工的信息
        employee_info_dict["级别"] = 2  # 级别+1
        employee_info_dict["工资"] += 1000  # 工资+1000
        # 将员工的信息更新回info_dict
        info_dict[name] = employee_info_dict
# 输出结果
print(info_dict)

输出

七、总结

1、数据容器特点对比

2、通用功能

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

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

相关文章

数据治理之路读书笔记

数据治理之路 一、数据治理的国际实践 美国——探索构建数据资产化管理体系&#xff08;奥巴马2012《数字政府战略》、2020年《美国国防部数据战略》&#xff09; 欧盟——从数据价值链到单一数据市场&#xff08;2013《欧洲数据价值链战略》、2015《欧洲数字单一市场战略》、…

【Python笔记-设计模式】单例模式

一、说明 单例是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 (一) 解决问题 维护共享资源&#xff08;数据库或文件&#xff09;的访问权限&#xff0c;避免多个实例覆盖同一变量&#xff0c;引发程序崩溃。 …

STM32入门教程-2023版【5-1】中断执行流程

关注 点赞 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 二、中断执行流程 &#xff08;1&#xff09;中断程序的执行流程 左边第一个图中&#xff0c;从上…

【MySQL 流浪之旅】 第六讲 浅谈 MySQL 锁

系列文章目录 【MySQL 流浪之旅】 第一讲 MySQL 安装【MySQL 流浪之旅】 第二讲 MySQL 基础操作【MySQL 流浪之旅】 第三讲 MySQL 基本工具【MySQL 流浪之旅】 第四讲 MySQL 逻辑备份【MySQL 流浪之旅】 第五讲 数据库设计的三个范式 目录 系列文章目录 一、什么是锁&#x…

网络安全|重大失误!微软被盗测试账号拥有公司Office 365管理员权限

微软网络近期遭黑客入侵&#xff0c;高管电子邮件被监视长达两个月。 一位研究员表示&#xff0c;黑客通过获取一个拥有管理员权限的老旧测试帐号的访问权限来实施入侵&#xff0c;这是微软犯下的重大失误。 微软在1月25日&#xff08;上周四&#xff09;发布第二篇公告&…

Android Studio项目——TCP客户端

目录 一、TCP客户端UI 1、UI展示 2、xml代码 二、TCP客户端数据发送 三、TCP客户端数据接收 一、TCP客户端UI 1、UI展示 2、xml代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.…

JAVA双列集合Map的特点

一次存一对元素&#xff0c;分别是 键 和 值&#xff0c;他们是一 一对应的&#xff1a;其中&#xff1a;键不可以重复&#xff0c;值可以重复这一对数据叫键值对、键值对对象、或 Entry Map 的体系结构&#xff1a; Map的常见API&#xff1a; 方式的实现&#xff1a;注意 Map …

UDP通信以及本地套接字

1. UDP 1.1 UDP 通信&#xff1a; UDP服务端创建出来的套接字不是监听套接字&#xff0c;直接就是通信套接字。 #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *de…

网络原理-TCP/IP(1)

应用层 我们之前编写完了基本的java socket, 要知道,我们之前所写的所有代码都在应用层中,都是为了完成某项业务,如翻译等.关于应用层,后面会有专门的讲解,在此处先讲一下基础知识. 应用层对应着应用程序,是程序员打交道最多的一层,调用系统提供的网络api写出的代码都是应用层…

正式阶段高等数学复习之不定积分

不定积分这部分是为后面的定积分做准备的&#xff0c;整体上的框架可以分为2&#xff08;定义&#xff09;3&#xff08;计算方式&#xff09;3&#xff08;能积出来的三个函数&#xff09; 1、不定积分的概念&#xff1a;求某一个函数的不定积分就是求这个函数的原函数&#…

DIY_SmartWatch_S3

​​​​​ 简介&#xff1a;成熟的智能手表方案DIY&#xff1b;采用乐鑫ESP32-S3&#xff0c;支持蓝牙和WIFI。240x280彩色LCD触摸屏&#xff1b;内置9D运动睡眠传感器&#xff0c;支持SPI接口扩展在线心率&#xff0c;血氧等健康传感模组&#xff1b;支持USB TypeC&#xff…

第4章 数据表示与特征工程

目录 1. 分类变量1.1 One-Hot编码&#xff08;虚拟变量&#xff09;检查字符串编码的分类数据 1.2 数字可以编码分类变量 2. 分箱、离散化、线性模型与树3. 交互特征与多相似特征4. 单变量非线性变换总结&#xff08;2~4&#xff09;5. 自动化特征选择5.1 单变量统计5.2 基于模…

[GN] 设计模式—— 创建型模式

文章目录 创建型模式单例模式 -- 确保对象唯一性例子优化饿汉式懒汉式 优缺点使用场景 简单工厂模式例子&#xff1a;优化优缺点适用场景 工厂方法模式 -- 多态工厂的实现例子优缺点优化适用场景 抽象工厂模式 -- 产品族的创建例子优缺点适用场景 总结 创建型模式 单例模式 –…

2024年新提出的算法:(凤头豪猪优化器)冠豪猪优化算法Crested Porcupine Optimizer(附Matlab代码)

本次介绍一种新的自然启发式元启发式算法——凤头豪猪优化器(Crested Porcupine Optimizer&#xff0c;CPO)。该成果于2024年1月发表在中科院1区SCI top期刊Knowledge-Based Systems&#xff08;IF 8.8&#xff09;上。 1、简介 受到凤头豪猪&#xff08;CP&#xff09;各种…

驼背的危害,远比您能想到的还要多!

现在的年轻人才20多岁的年纪&#xff0c;就拥有了80多岁的腰椎。 不同于老年人由于骨质疏松而引发的驼背&#xff0c;年轻人驼背大部分是因为工作或学习中长期不正常坐姿导致&#xff0c;也称姿势性驼背。 我们日常工作的时候&#xff0c;习惯性的肩膀前倾去工作&#xff0c;导…

【amis低代码前端框架】vue2集成百度低代码前端框架amis

什么是amis&#xff1a;amis 是一个低代码前端框架&#xff0c;它使用 JSON 配置来生成页面&#xff0c;可以减少页面开发工作量&#xff0c;极大提升效率。 第一步&#xff1a;下载amis 命令行内执行以下命令下载安装amis npm i amis第二步&#xff1a;下载完毕amis后 将nod…

[React源码解析] Fiber (二)

在React15及以前, Reconciler采用递归的方式创建虚拟Dom, 但是递归过程不可以中断, 如果组件的层级比较深的话, 递归会占用线程很多时间, 那么会造成卡顿。 为了解决这个问题, React16将递归的无法中断的更新重构为异步的可中断更新, Fiber架构诞生。 文章目录 1.Fiber的结构2…

在Windows11的WSL上运行Llama2-7b-chat 下

上一篇博客讲了我跑Llama的demo的心路历程&#xff08;上一篇博客传送门&#xff09;&#xff0c;这篇我们主要是讲下怎么配置。 快速开始 使用Linux、Linux、Linux&#xff0c;重要的事情说三遍&#xff0c;如果你和我一样懒得安装双系统&#xff0c;那么在Windows下安装一个…

java组装复杂的map结构

如下图数据库查出来的记录要组装成如下图所示的map结构。 直接上代码 package com.rt.test.other;import org.apache.commons.lang.StringUtils;import java.util.*;public class TestMap {public static void main(String[] args) {Map<String,String> mapnew LinkedHa…

vue 使用 v-viewer 用于图片浏览的Vue组件,支持旋转、缩放、翻转等操作,基于viewer.js。

作者连接 npm&#xff1a; npm install v-viewerlegacy viewerjs main.js 引入&#xff1a; // 引入Viewer插件 import VueViewer, { directive as viewerDirective } from v-viewer; // 引入Viewer插件的图片预览器的样式 import viewerjs/dist/viewer.css; // 使用Viewer图片…