Python 3 入门基础知识 之数据容器及用法【2】 推荐

news2024/11/13 22:21:02

前面关于python的下载安装、如何定义变量,基本的数据类型,以及if条件语句、for循环语句,部分运算都进行了梳理总结。参考:Python 3 入门基础知识【1】数据类型 安装下载 推荐-CSDN博客

这里回顾一下python的数据容器基础知识,包括list容器、tuple、dict和set容器,以及他们的用法和区别特点,以便自己查看,欢迎正在学习python的同学参考,有问题评论区交流,谢谢。

目录

一.python中的容器

1.list 容器

1.1 list定义

1.2 for循环按照顺便访问list

1.3 索引访问

1.4 倒序访问

1.5 向list添加新元素

1.6 从list删除元素

1.7 替换list元素

1.8 二维数组

2.tuple容器

2.1 定义及访问

2.2 访问tuple元素的方法 

2.3 创建单个元素的tuple

2.4 可变tuple

 3.dict容器

3.1 定义dict容器

3.2 读取dict数据

 3.3 添加元素

3.4 更新dict元素

3.5 删除dict元素

3.6 dict的特点

3.7 操作dict的其他方法

4.set容器

4.1 读取set元素

4.2 添加元素

4.3 删除元素 remove()

4.4 操作set的其他方法


一.python中的容器

在程序中,容器是一种可以把多个元素放在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in等关键字判断某个元素是否包含在容器中。在Python中,包括列表(list)、元组(tuple)、字典(dict)、集合(set)等,他们都可以放入多个元素,因此都可以算作是容器,这些容器是Python编程中非常重要的数据结构。

1.list 容器

1.1 list定义

列表(list)是一种有序的容器,放入list中的元素,将会按照一定顺序排列。构造list的方法非常简单,使用中括号[]把需要放在容器里面的元素括起来,就定义了一个列表

1.2 for循环按照顺便访问list

1.3 索引访问

我们通过中括号[]来按位置访问对应的元素

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[0])   #Alice
print(names[4])   #超出索引会报错的

#报错如下
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

 也支持切片访问,切片访问超出索引不会报错,但是会取不到任何元素

names = ['Alice', 'Bob', 'David', 'Ellena']
sub_names = names[0:2]
print(sub_names)

#切片访问超出索引不会报错,但是会取不到任何元素
sub_names = names[5:10]
print(sub_names) # ==> []
1.4 倒序访问

倒序访问越界也会报错,代码如下:

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[-1]) #Ellena

#越界也会报错
print(names[-5])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
1.5 向list添加新元素

有两种方法

  1. 第一个办法是用append()方法,默认把数据添加到列表的末尾;
  2. 第二insert()方法需要两个参数,分别是需要插入的位置,以及需要插入的元素。
names = ['Alice', 'Bob', 'David', 'Ellena']
names.append('Candy')    # ['Alice', 'Bob', 'David', 'Ellena', 'Candy']
names.insert(2, 'Candy') #['Alice', 'Bob', 'Candy', 'David', 'Ellena']
1.6 从list删除元素

使用列表的pop()方法,pop()方法默认删除列表的最后一个元素,并返回

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name = L.pop()  #默认删除list列表的最后一个元素 ellena
name = L.pop(2) #指定删除index是2 的元素 即candy
1.7 替换list元素
L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
L[2] = 'Canlina'
L[-3] = 'Canlina'

# 如果替换不存在的下标也会报错的
L[6] = 'Canlina'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
1.8 二维数组
alice_scores = [100, 89, 92]
bob_scores = [70, 65, 81]
candy_scores = [88, 72, 77]
all_scores = [alice_scores, bob_scores, candy_scores]

2.tuple容器

元组(tuple)和list一样,也是一个有序容器,在元组中,同样可以包含0个或者多个元素,并且也支持索引访问、切片等操作。
定义元组的方式是使用小括号()将元组内的元素括起来。

2.1 定义及访问
T = ('Alice', 'Bob', 'Candy', 'David', 'Ellena')
# 通过下标的方式访问元素
print(T[0]) # ==> Alice

# 切片
print(T[1:3]) # ==> ('Bob', 'Candy')

数据转换 可以把不是元组的容器转换为元组,比如将列表转换成元组,也可以把元组转换成列表

# list列表数据转换成元组类型
L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
print(L) # ==> ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
T = tuple(L)
print(T) # ==> ('Alice', 'Bob', 'Candy', 'David', 'Ellena')

# 元组类型转换成list列表类型
T = ('Alice', 'Bob', 'Candy', 'David', 'Ellena')
print(T) # ==> ('Alice', 'Bob', 'Candy', 'David', 'Ellena')
L = list(T)
print(L) # ==> ['Alice', 'Bob', 'Candy', 'David', 'Ellena']

但是,tuple和list不一样的是,tuple是固定不变的,一旦变成tuple,tuple中的每一个元素都不可被改变,同时也不能再往tuple中添加数据,而list是可以的。元组(tuple)的这个特性是非常重要的,在运行上tuple的性能是list的数倍。

2.2 访问tuple元素的方法 

count()方法用来统计tuple中某个元素出现的次数。

T = (1, 1, 2, 2, 3, 3, 1, 3, 5, 7, 9)
print(T.count(1)) # ==> 3

index()方法可以返回指定元素的下标,当一个元素多次重复出现时,则返回第一次出现的下标位置,同样的元素多次出现时返回第一次出现的位置的坐标。

T = (1, 1, 2, 2, 3, 3, 1, 3, 5, 7, 9)
T.index(5) # ==> 8
T.index(1) # ==> 0 # 多次出现,返回第一次出现的位置
2.3 创建单个元素的tuple
# 包含0个元素的 tuple
T = ()
print(T) # ==> ()

# 包含1个元素的 tuple
T = (1)
print(T) # ==> 1  # 打印结果是1

上面我们新建一个元组,打印结果却是1,为什么不是(1),是因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果(1)被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。因此,要定义只有一个元素的tuple,需要在元素后面添加一个逗号,而对于多个元素的tuple,则加和不加这个逗号,效果是一样的。

T = (1, )
print(T) # ==> (1, )
2.4 可变tuple

前面我们回顾了,对于tuple,它和list一个最大的不同点就是tuple是不可变的,tuple里面的元素,也是不可替换的。但是这针对的是仅包含基础数据类型(数字类型、布尔类型、字符串类型)的数据,对于组合数据类型,则不受这个约束。

T = (1, 'CH', [3, 4])
L = T[2]
print(L) # ==> [3, 4]
# 尝试替换L中的元素
L[1] = 40
print(L) # ==> [3, 40]
print(T) # ==> (1, 'CH', [3, 40])

虽然tuple中的list元素改变了,但是tuple本身指向的list仍然是同一个list,list本身并没有改变,改变的只是list里面的一个元素,这是tuple所约束不到的范围。

这样写会报错的 

T = (1, 'CH', [3, 4])
L2 = [3, 40]
# 尝试替换tuple中的list
T[2] = L2
# 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

 3.dict容器

3.1 定义dict容器

在dict中,每一项包含一个key和一个value,key和value是一一对应的。在定义里,我们使用花括号{}表示这是一个dict,然后key和value之间使用冒号:分割,并且每一组key:value的最后,以逗号,表示这一组的结束。

d = {
    'Alice': 45,
    'Bob': 60,
    'Candy': 75,
    'David': 86,
    'Ellena': 49
}

也可以这样定义

d = dict()
print(d) # ==> {}
3.2 读取dict数据

dict提供通过key找到对应value的功能,通过d[key]的形式,就可以得到对应的value。

d = {
    'Alice': 45,
    'Bob': 60,
    'Candy': 75,
    'David': 86,
    'Ellena': 49,
    'Gaven': 86
}
print(d['Bob']) # ==> 60

# key不存在时也会报错
print(d['Dodo'])
# 抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Dodo'

另外一种通过key也能获取数据,即使不存在不会报错会返回none

print(d.get('Alice')) # ==> 45
print(d.get('Dodo')) # ==> None
 3.3 添加元素
d['Mimi'] = 72
d['Mimi'] = [72, 73]  #value可以是任意类型的元素,可以是list、tuple等
d['Mimi'].append(75)
3.4 更新dict元素
  1. 当key不存在时,往dict中添加对应的key: value元素。
  2. 当key存在时,会更新dict,用新的value替换原来的value。

因此,在使用赋值语句往dict中添加元素时,为了避免不必要的覆盖问题,我们需要先判断key是否存在,然后再做更新。

d['Bob'] = 75  #75
3.5 删除dict元素

dict提供便捷的pop()方法,允许我们快速删除元素,pop()方法需要指定需要删除的元素的key,并返回对应的value。

alice_score= d.pop('Alice')
print(alice_score) # ==> 45

# 已经删除的key 再次删除会报错的
d.pop('Alice')
# 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Alice'
3.6 dict的特点

1.查找速度快但是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。

2在Python3.5之前,dict中的元素是无序的,Python3.7后版本中,却得到了有序的结果。

3.如果将list作为dict的key会引起错误。由于dict是按 key 查找,所以在一个dict中,key不能重复。

4.遍历dict

d = {
    'Alice': 45,
    'Bob': 60,
    'Candy': 75,
    'David': 86,
    'Ellena': 49
}
# 第一种
for key in d: # 遍历d的key
    value = d[key]
    if value > 60:
        print(key, value)
# ==> Candy 75
# ==> David 86

#第二种
for key, value in d.items():
    if value > 60:
        print(key, value)
# ==> Candy 75
# ==> David 86
3.7 操作dict的其他方法

获取dict的所有key、获取dict所有的value、清除所有元素

d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]}
# 获取所有的keys
for key in d.keys():
    print(key)

# 获取所有的values
for key in d.values():
    print(key)
# ==> [50, 61, 66]
# ==> [80, 61, 66]
# ==> [88, 75, 90]

# 清除所有的元素
d.clear()
print(d) # ==> {}

4.set容器

set和list类似,拥有一系列元素,但是set和list不一样,set里面的元素是不允许重复的,而list里面可以包含相同的元素;set与list的另一个区别是,set里面的元素是没有顺序的。创建set的方式是使用set(),并传入一个list,list的元素将会被转换成set的元素。

# set中包含 重复元素时
s = set([1, 4, 3, 2, 5, 4, 2, 3, 1])
print(s) # ==> set([1, 2, 3, 4, 5]) # 打印结果会自动去除重复元素
4.1 读取set元素
names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name_set = set(names)

'Alice' in name_set # ==> True #存在元素 结果是true
'Bobby' in name_set # ==>False #不存在元素 结果是false
'bob' in name_set # ==> False  #区分大小写 大小写不一致结果是false 
4.2 添加元素
name_set.add('Gina')

# update 批量添加元素
new_names = ['Hally', 'Isen', 'Jenny', 'Karl']
name_set = set(names)
name_set.update(new_names)
4.3 删除元素 remove()

set提供了remove()方法允许我们删除set中的元素。当数据不存在的时候删除会报错,因此,使用remove()方法,我们需要格外小心,需要提前判断要remove()的元素是否在set里面,确保存在后,再进行remove。

name_set = set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
name_set.remove('Jenny')

# ==> 重复remove 'Jenny'引起错误
name_set.remove('Jenny') 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Jenny'
4.4 操作set的其他方法

不会报错的删除方法discard()

当元素不存在时,使用discard()并不会引发错误,所以使用discard()是更加高效的一个方法。

name_set.discard('Jenny')

 清除所有元素的方法clear() 

name_set.clear()

集合的子集和超集

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 判断s1是否为s2的子集
s1.issubset(s2) # ==> True
# 判断s2是否为s1的超集
s2.issuperset(s1) # ==> True

判断集合是否重合

有时候需要判断两个集合是否有重合的地方,如果使用传统的方法,需要使用for循环一个一个的去判断,非常麻烦,set提供isdisjoint()方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True。

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
s1.isdisjoint(s2) # ==> False,因为有重复元素1、2、3、4、5

关于python的一些数据容器的基础知识到这里我们回顾完了,有问题欢迎大家评论区交流补充,感谢。python的下载安装、变量、数据类型请参考:Python 3 入门基础知识【1】数据类型 安装下载 推荐-CSDN博客

后面内容python中函数的基础知识请参考: Python 3 入门基础知识【3】函数

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

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

相关文章

智能换热:图扑智慧供热可视化管理平台

图扑搭建智慧供热可视化管理平台&#xff0c;通过实时监控和数据分析提升运营效率&#xff0c;实现智能化管理&#xff0c;保障系统稳定与高效运行。

深挖Redis分布式缓存:你还在为缓存架构感到困惑吗?灵办AI为你揭开文献背后的秘密!

文章目录 1 灵办AI插件2 翻译~外文文献3 解释~文献标题分析4 文档解析~文献总结5 搜索~全网搜索总结6 总体评价~文献代码分析总结 本文将引用 Research and Application of Distributed Cache Based on Redis [1] 外文文献解读为案例进行剥削&#xff0c;进而提高对 Redis的分布…

相机光学(三十五)——三刺激值

0.参考链接 [1]三刺激值 [2]色差仪CIERGB和CIEXYZ光谱三刺激值区别 1.三刺激值的由来 根据杨-亥姆霍兹的三原色理论&#xff0c;色的感觉是由于三种原色光刺激的综合结果。在红、绿&#xff0c;蓝三原色系统中&#xff0c;红。绿、蓝的刺激量分别以R、G、B表示之。由于从实际…

安装开源软件ChatALL(齐叨)来聚合各大人工智能工具

安装开源软件ChatALL&#xff08;齐叨&#xff09;来聚合各大人工智能工具 前言 如果你跟我一样无论遇到什么问题都要询问人工智能&#xff0c;并且至少同时用4-5个公司的人工智能&#xff0c;选择一个最中意的结果 以前我都会用Chrome浏览器打开4个窗口&#xff0c;每个问题…

c语言中比较特殊的输入格式

目录 一.%[ ] 格式说明符 1.基本用法 (1)读取字母字符: (2)读取数字字符: (3)读取所有字符直到遇到空格: (4)读取直到换行符: 2.使用范围和组合: 3.^ 取反操作 4.注意事项 (1). 字符范围的正确表示 (2). 避免字符集中的特殊字符冲突 (3).避免空字符集 (4). 输入长…

C++竞赛初阶L1-11-第五单元-for循环(25~26课)510: T454422 均值

题目内容 给出一组样本数据&#xff0c;计算其均值。 输入格式 输入有两行&#xff0c;第一行包含一个整数&#xff0c;表示样本容量 n。 第二行包含 n 个浮点数 ai​&#xff0c;代表各个样本数据。 输出格式 输出一行&#xff0c;包含一个浮点数&#xff0c;表示均值。 …

TikTok爆款盘点-哪些产品会更受欢迎

海外短视频兴起&#xff0c;TikTok成为了国内企业出海最成功的APP。TikTok现在不仅是一个娱乐社交平台&#xff0c;也是一个强大的电商平台。如果出海卖家在选品上好好下功夫&#xff0c;利用TikTok这个营销工具&#xff0c;在海外也能获得不小的收益。 那么&#xff0c;TikTok…

网络协议十 应用层 SPDY / HTTP2 / QUIC / HTTP3

一 HTTP1.1 的不足 二 SPDY 协议 三 HTTP2 也只是需要在 server 端配置&#xff0c;不需要改动 服务器的代码。 HTTP2 可以看成是 将 SPDY 和 HTTP 融合在一起的改动 上面image sprites 的概念 HTTP2的问题--对头阻塞 和 握手延迟问题 引出的 QUIC 技术 由于传输层用的 TC…

node20+版本下hexo部署报错失败的解决办法

最近升级了node.js的版本&#xff0c;升到了最新的稳定版本v20.16.0&#xff0c;结果发现在该版本下hexo部署报错失败。本文记录了node20版本下hexo部署报错失败的解决办法。 一、报错信息 执行hexo的deploy部署命令 hexo d具体报错信息如下 INFO Deploying: git INFO Cl…

【大模型系列】更像人类行为的爬虫框架

随着大规模模型技术的兴起&#xff0c;我们可以看到百模大战、各种智能体、百花齐放的应用场景&#xff0c;那么作为一名前端开发者&#xff0c;以前端的视角&#xff0c;我们应当如何积极做好技术储备&#xff0c;开拓技术视野&#xff0c;在智能体时代保持一定的竞争力呢&…

webpack打包可视化分析之--webpack-bundle-analyzer

在开发一些项目的时候&#xff0c;有时候有些旧的框架项目用的webpacke打包慢&#xff0c;打包出来的包文件大&#xff0c;然而我们想要对它进行优化分析&#xff0c;有些旧的项目可能在不断迭代的过程中&#xff0c;有些模块功能改造或者有些需求变化&#xff0c;有些新需求模…

python的warnings.filterwarnings(“ignore“)

在python中运行代码经常会遇到的情况是——代码可以正常运行但是会提示警告&#xff0c;如果想要去掉这些警告&#xff0c;可以使用python的warnings.filterwarnings(“ignore”)函数。 代码&#xff1a; import warnings warnings.filterwarnings(ignore)看一下这个函数&…

【学习笔记】数据结构(五)

多维数组和广义表 文章目录 多维数组和广义表5.1 数组的定义5.2 数组的顺序表示和实现5.3 矩阵的压缩存储5.3.1 特殊矩阵5.3.2 稀疏矩阵三元组顺序表 (Triplet Representation) - 有序的双下标法行逻辑链接的顺序表十字链表法 5.4 广义表的定义5.5 广义表的存储结构5.6 m元多项…

mysql与Python交互

mysql数据库基本操作&#xff1a; [rootm ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 解压压缩包 [rootm ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64 mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootm ~]# cp -r mysql-5.7.44-linu…

【myz_tools】Python库 myz_tools:Python算法及文档自动化生成工具

写在前面 本来最开始只是单纯的想整理一下常用到的各类算法&#xff0c;还有一些辅助类的函数&#xff0c;方便时间短的情况下快速开发。后来发现整理成库更方便些&#xff0c;索性做成库&#xff0c;通过pip install 直接可以安装使用 关于库 平时见到的各类算法大多数还是…

volatile 浅谈

在Java中&#xff0c;volatile 关键字是一种轻量级的同步机制&#xff0c;它用于确保变量的可见性和有序性&#xff0c;但不保证原子性。当我们说 volatile 屏障时&#xff0c;我们实际上是在讨论 volatile 变量如何影响Java内存模型&#xff08;JMM&#xff09;中的操作重排序…

Vue3+vite+ts 项目使用mockjs

1、安装mockjs npm i mockjs 2、安装vite-plugin-mock npm i vite-plugin-mock -D 3、安装axios npm i axios 4.在src目录下创建mock文件夹,在文件夹内创建login.ts等文件&#xff0c;并在文件夹内放置以下内容&#xff08;注&#xff1a;URL要和真实请求地址保持一致&am…

使用html+css+js实现完整的登录注册页面

在这篇博客中&#xff0c;我们将讨论如何使用简单的 HTML 和 CSS 构建一个登录与注册页面。这个页面包含两个主要部分&#xff1a;登录界面和注册界面。我们还会展示如何通过 JavaScript 切换这两个部分的显示状态。 页面结构 我们将创建一个页面&#xff0c;其中包含两个主要…

DALL-E 2:重新定义图像生成的人工智能

DALL-E 2是一款先进的人工智能模型&#xff0c;它在图像生成领域取得了突破性进展。与前一代DALL-E相比&#xff0c;DALL-E 2能够以更高的分辨率和更精细的细节生成图像&#xff0c;同时还能更好地理解并处理复杂的文本描述。这意味着&#xff0c;用户可以通过输入描述性的文本…

⌈ 传知代码 ⌋ Visual SLAM函数

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…