Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >预备小菜:Python入门之数据结构

预备小菜:Python入门之数据结构

作者头像
马拉松程序员
发布于 2023-02-24 10:49:15
发布于 2023-02-24 10:49:15
67200
代码可运行
举报
运行总次数:0
代码可运行

如果把程序员比喻成厨师的话,那么数据结构就是初始最常用的工具,那就是锅碗瓢盆。这些也叫容器,因为能存放东西,不管是放切好的菜,还是煮开的水。

同样在代码的世界中,也需要一些容器来存放数据或者信息,供后续加工使用,那么不同的容器有不同的特点,在对应不同的场景中存放数据使用。

Python中有四个内置数据结构(Built-in Data Structure):分别是列表list、元组tuple、字典dict、集合set,它们也是一个容器,里面存放数据。下面我们来认识下这四个数据结构各自的特点。

列表List

特点:

  1. 列表使用“[ ]”来表示,里面可以储存任意对象。
  2. 列表中的元素是可变的、可重复的,可以对每个元素修改、删除,也可以新增元素
  3. 列表是有序的,可以通过索引访问每个元素

常用操作:

1.创建列表

列表定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList = ['a', 'b', 'c']print(myList)['a', 'b', 'c']

2. 新增元素

新增元素,默认是在列表尾添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList.append("d")print(myList)['a', 'b', 'c', 'd']

在指定位置添加元素,下标从0开始计

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList.insert(2, "e")print(myList)['a', 'b', 'e', 'c', 'd']

append方法是在末尾添加元素,insert是在指定位置添加元素。insert需要两个参数,如果只是传一个参数,并不是在末尾添加元素,而是报错TypeError: insert expected 2 arguments, got 1 。如果添加多个元素怎么处理?或者说如何合并两个列表。

两个list合并

方法1:使用extend()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 myList=['a', 'b', 'c'] 
 myList2=[1,2]
 myList.extend(myList2) 
 print(myList)['a', 'b', 'c', 1, 2]

方法2:直接使用“+”,将两个list合并

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList = myList + myList3print(myList)['a', 'b', 'c', 1, 2, 3, 4]

如果使用append添加一个list会完成两个list的合并?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList4 = ["A", "B"]myList.append(myList4)print(myList)['a', 'b', 'c', 1, 2, 3, 4, ['A', 'B']]

所以append的参数如果是一个list,那么它会将list作为一个对象进行添加,而不对list内的元素进行合并,这也正印证了在Python中一切皆对象。而且也可以看出来list里面啥都可以装,并不是限制对象类型,字符串、整数甚至list对象都可以存。

3.修改元素

修改指定位置的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList=['a', 'b', 'c', 'd']myList[2] = "B"print(myList)['a', 'B', 'c', 'd']

4.删除元素

删除尾部元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList.pop()
print(myList)['a', 'B', 'c']

删除指定位置(下标)元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList.pop(2)print(myList)['a', 'B']

删除列表中某个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList.remove("B")print(myList)['a']

5.遍历列表

for循环 遍历列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList=['a', 'b', 'c']for i in myList:print(i)#运行结果:abc

遍历列表是在数据处理中使用频率很高的场景,当然并不仅仅只有for循环,使用while循环也可以完成。

while循环 遍历列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList = ['a', 'b', 'c']
count = 0
while count < len(myList):
print(myList[count])
count = count + 1
#运行结果:
a
b
c

其实上述while循环本质上也是在使用下标来访问每一个元素,在简洁性不如for循环直接。除此之外还可以使用Python内置函数iter()来生成一个迭代器,遍历list。

iter()遍历列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList=['a', 'b', 'c']for val in iter(myList):       print(val)

元组Tuple

特点:

  1. 元组使用“( )”来表示,里面可以储存任意对象
  2. 元组中的元素是不可变的、可重复的
  3. 元组是有序的,可以通过索引访问每个元素

简单理解元组就是一个固定的列表,没有列表的增加删除修改的方法,只能查询。那元组存在的目的是什么呢?因为元组不可变,所以代码更安全。这就是跟Java中的final关键词修饰的常量是一个效果的。

问题:如果Tuple里的元素包含list,那么list是可以修改的吗?

修改Tuple中的list的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myTuple = ('a', 'b', ['A', 'B'])
print(myTuple)
myTuple[2][0] = "a"
myTuple[2].append("c")
print(myTuple)

运行结果:

('a', 'b', ['A', 'B'])

('a', 'b', ['a', 'B', 'c'])

可见Tuple中的list是可以修改的,还可以增加。那为什么还说Tuple是不可变的,注意这里变化的是什么,是list,而不是Tuple本身。

集合Set

特点:

  1. 集合使用“{}”来表示,里面可以储存任意对象
  2. 集合中的元素是可变的、不可重复的,可以增加删除修改
  3. 元组是无序的

Python中的set跟Java中的set特点类似,都是不可重复,或者是存入的重复对象只是保留一个,也正是因为这一个特点,在数据分析中,经常用set来做数据去重

Python中的集合跟中学数学的集合功能比较像,支持union(联合), intersection(交), difference(差)和sysmmetric difference (对称差集)等数学运算。

常用操作:

1.创建集合

创建set

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mySet=set('abcdabcd')print(mySet){'c', 'a', 'b', 'd'}

再次运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'c', 'd', 'b', 'a'}

如果这一段代码运行两次,反而打印的结果并不一样,这就是因为元组是无序的。在Python中字典类型数据也是用“{}”来表示,但是内容不一样,后面会有详细讲解。不过如果仅仅一个空的{}表示的是一个空字典,而不是空集合。创建空集合只能使用set()函数,不传参数得到的结果就是一个空集合。

2. 集合运算

创建两个set

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = {'a', 'b', 'c'}b = {'a', 'b', 'd'}

a和b的并集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(a&b)  #也可以用 a.union(b){'a', 'b'}

a和b的交集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(a|b) #也可以用 a.intersection(b){'b', 'c', 'a', 'd'}

a和b的差集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(a-b)  #也可以用 a.difference(b)
{'c'}

b和a的差集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(b-a)
{'d'}

a和b的对称差集(在a或者b中出现,但不能同时出现)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(a ^b)  #也可以用 a.symmetric_difference(b){'c', 'd'}

3. 添加元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#创建setmySet = {'a', 'b', 'c'}# 添加一个元素mySet.update("ad")print(mySet){'b', 'a', 'd', 'c'}mySet.add("ad")print(mySet){'d', 'a', 'ad', 'b', 'c'}

从上面可以看出集合中有两个函数,add()和update(),两者的区别在于,add()做新增时候,参数作为一个整体字符串添加,update()新增的时候,字符串会拆分成当个字符添加到set中,也就是update会进行将对象迭代添加,这样update()的参数中必须是一个可迭代的对象。

注意:集合中可以添加str、num、tuple对象,不能添加list、dict、set对象。update()的参数可以是str或tuple,不能是num,因为它不可迭代。

4.删除元素

remove方法删除一个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mySet = {'a', 'b', 'c'}
mySet. remove ("b")
print(mySet){'c', 'a'}
mySet.remove("b")
print(mySet)

报错:KeyError: 'b'

discard方法删除一个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mySet = {'a', 'b', 'c'}mySet.discard("b")print(mySet){'c', 'a'}mySet.discard("b")print(mySet){'c', 'a'}

从上面代码中可以看出,remove()和discard()的区别是,remove()删除一个不存在的key会报KeyError的错误,discard()如果删除一个set中本不存在的key时,将不进行任何操作。

4. 元素去重

由于集合中的元素不能重复的特性,经常用来给list去重,然后得到的集合还可以通过list()函数转回list对象,得到新的list是原来list去重数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myList = ['a', 'b', 'b', 'c', 'c']mySet = set(myList)print(mySet){'a', 'b', 'c'}#list转set再转回listmyNewList = list(mySet)

5. 元素是否(不)包含在Set中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mySet = {'a', 'b', 'c'}
#判断一个元素是否在集合中
if 'a' in mySet:
  print(True)
else:
  print(False)
# 判断一个元素是否不在集合中
if 'd' not in mySet:
  print(True)
else:    
  print(False)
#程序运行结果:
True
True

字典Dict

字典(Dictionary)是一种以键值对作为元素的存储的容器,跟Java语言中的map集合大同小异,是使用频率很高的数据结构之一。

特点:

1. 字典是一个可变的容器,且可存储任意类型对象。

2. 整个字典包括在 “{ }”中。

3. 字典的每个键值 key:value 对,中间用冒号 : 分割,每个键值对之间用逗号 , 分割

4. 值可以取任何数据类型,但键必须是不可变的对象,如字符串,数字或元组。

5. 键(key)唯一,可以为空(None)。值可以空,可以为任意对象,可重复。

常用操作:

1.创建字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#创建dict
myDict = { None: 1, "a": 2, "b": 3}
print(myDict)
{None: 1, 'a': 2, 'b': 3}
#参数赋值创建
myDict =dict(a=1,b=2)
print(myDict)
{ 'a': 1, 'b': 2}

2.添加元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myDict = { "a": 1, "b": 2}
myDict['c'] = 3 #根据键值对添加{'a': 1, 'b': 2, 'c': 3} 
temp = {'d': 4, 'e': 5}
myDict.update(temp) #使用update方法添加
print(myDict)
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

3.删除元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myDict = {'a': 1, 'b': 2, 'c': 3}del myDict['a']  #使用del()函数删除print(myDict){'b': 2, 'c': 3}myDict.pop('b') #使用pop()函数删除2print(myDict){'c': 3}myDict.clear() #使用clear ()函数清空字典print(myDict) #得到空字典{}

pop函数是功能是取出key返回值,并将其键值对删除,所以pop()函数是有返回值的。

4.查询字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myDict = {'a': 1, 'b': 2, 'c': 3}
print(myDict['a']) #通过“键值对”访问
1
print(myDict.get('d', '没有d')) #使用get()访问
没有d

字典get()函数为dict.get(key,[default]),default为可选项,用于指定当‘键’不存在时 返回一个默认值,如果省略,默认返回None。如果直接使用myDict[‘a’]取值方式会报KeyError:的异常。

5.遍历字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myDict = {'a': 1, 'b': 2, 'c': 3}#使用字典对象的dict.items()方法获取字典的各个元素的元祖列表for item in myDict.items():       print(item)#代码结果:('a', 1)('b', 2)('c', 3)# key, value可以分别获取每个键值对for key, value in myDict.items():       print(key, value)#代码结果:a 1b 2c 3#keys()和values()方法获取字典的键和值列表for key in myDict.keys ():       print(key)#代码结果:abcfor value in myDict.values():       print(value)#代码结果:123

字典的遍历是很常用的一个场景,尤其是在数据采集的时候,经常会将字符串数据转成字典对象来进行迭代或者取值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马拉松程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​每天 3 分钟,小闫带你学 Python(十七)
Pleasure in the job puts perfection in the work.
小闫同学啊
2019/08/09
4240
​每天 3 分钟,小闫带你学 Python(十七)
​Python数据类型
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
PayneWu
2020/12/18
7350
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
平凡之路.
2025/01/13
1250
Python入门:7.Pythond的内置容器
Python(二) 序列
常用的序列结构:列表、元组、字符串、字典、range、zip、enumerate 等
赤蓝紫
2023/01/01
1.8K0
Python基本数据结构:深入探讨列表、元组、集合和字典
Python作为一门多用途的编程语言,提供了多种基本数据结构,包括列表、元组、集合和字典。这些数据结构在Python编程中起着至关重要的作用。本文将深入探讨这些数据结构的特性、用法以及最佳实践,帮助你更好地理解和利用Python的基本数据结构。
海拥
2023/09/19
1.3K0
Python基本数据结构:深入探讨列表、元组、集合和字典
Python3 基本数据结构总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
chaibubble
2019/09/25
1.1K0
python入门之数据结构详细介绍以及代码示例
Python 中的数据结构是指在 Python 中可用的数据类型,包括列表、元组、字典、集合等。下面我们将分别介绍这些数据结构的特点和使用方法。
疯狂的KK
2023/03/20
1.3K0
2.0 Python 数据结构与类型
数据类型是编程语言中的一个重要概念,它定义了数据的类型和提供了特定的操作和方法。在 python 中,数据类型的作用是将不同类型的数据进行分类和定义,例如数字、字符串、列表、元组、集合、字典等。这些数据类型不仅定义了数据的类型,还为数据提供了一些特定的操作和方法,例如字符串支持连接和分割,列表支持排序和添加元素,字典支持查找和更新等。因此,选择合适的数据类型是 python 编程的重要组成部分。
王瑞MVP
2023/08/11
5990
Python的常见数据结构
元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值:
timerring
2023/05/04
8460
Python的常见数据结构
Python课程基础总结概括梳理【pyhton笔记】
Python3 手册学习:系统化全面化 视频学习:实用性高、学到了经验、用途 刷题平台:结合学习,事半功倍 1、Python可以同时为多个变量赋值,如a, b = 1, 2。 反斜杠()可以作为续行符 python库是可以其它语言编写,非常高效 python自身运行效率低于c 老师提供的学习网站http://sdlg.alphacoding.cn/course/292/chapters #格式化输出 a = 18 b = 12 print(f'今年{a}岁{b+1}')#这个更高效 #今年18岁13
来杯Sherry
2023/05/25
5120
Python字典和集合
1 字典字典和列表类似,同样是可变序列,不过与列表不同,字典是无序的。主要特征解释通过键而不是通过索引来读取元素字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。字典是任意数据类型的无序集合和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。字典是可变的,并且可以任意嵌套字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典
虫无涯
2023/02/02
8590
Python 极速入门教程
目前我的博客长文显示效果不佳,缺乏目录,因此可以考虑下载阅读。博客完全开源于 Github.
Clouder0
2022/09/23
1K0
Python 基础语法六-dict 和 set
字典(dictionary),其他开发语言中也有称为 map 的,使用键值对(key-value)方式存储数据,具有很快的查找速度。
keinYe
2019/08/01
5800
教师妹学python之五:数据结构
现实世界中,我们经常需要一些“容器”来存储生活中使用的小物件。比如使用存钱罐存硬币、抽屉存媳妇用的护肤品、首饰等。通常我们如果将硬币、护肤品当成前文讲到的基本数据类型的实例,那么存钱罐、抽屉就可以类比成存储多个基本数据类型实例的容器,即Python的数据结构。
互联网金融打杂
2022/08/01
4320
教师妹学python之五:数据结构
Python入门(三):数据结构
切换list[begin:end],获取切换list内元素,从begin开始,至end结束,不包含end
披头
2019/12/26
1K0
Python数据结构——字典
很多时候,数据对应的元素之间的顺序是无关紧要的,因为各元素都具有特别的意义,例如存储一些朋友的手机号码,此时用序列来存储数据并不是一个好的选择,Python提供了一个很好的解决方案--使用字典数据类型。 在Python中,字典是属于映射类型的数据结构。字典包含以任意类型的数据结构作为元素的集合,同时各元素都具有与之对应且唯一的键,字典主要通过键来访问对应的元素。字典与列表、元组有所不同,后两者使用索引来对应元素,而字典的元素都拥有各自的键,每个键值对都可以看成是一个映射对应关系。此外,元素在字典中没有严格的顺序关系。由于字典是可变的,所以可以对字典对象进行元素的增删改查等基本操作。
Francek Chen
2025/01/22
1140
Python数据结构——字典
Python中常用的数据结构
列表是Python中最常用的数据结构之一,它是一个有序的集合,可以存储任意类型的数据。列表使用方括号([])来表示,每个元素之间用逗号分隔。
疯狂的KK
2023/03/17
4970
Python入门基础连载(2)数据结构
Python数据结构包括了列表(list),元组(tuple),字典(dict)和集合(set),这些也都可以称之为容器,下面Cooldog就和大家一起学习一下这些容器: - 列表(list) list是处理一组有序项目的数据结构 ,即你可以在一个列表中存储一个序列的项目。列表中的项目应该包括在方括号中,一旦你创建了一个列表,你可以添加、删除或是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的 数据类型,即这种类型是可以被改变的。下面举例: 创建列表: list1 = ['面包板', '论
企鹅号小编
2018/01/30
7730
Python入门基础连载(2)数据结构
python数据结构
Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。  以下是 Python 中列表
端碗吹水
2020/09/23
1.5K0
Python入门系列(四)别再傻傻分不清:列表、元组、字典、集合的区别
您也可以使用pop()方法删除一个项目,但此方法将删除最后一个项目。请记住,集合是无序的,因此您将不知道删除了哪些项。
用户10002156
2022/09/05
2K0
相关推荐
​每天 3 分钟,小闫带你学 Python(十七)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档