热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

定义空列表元素类型_Python基础数据类型:元组、列表、字典、集合

​你好,我是goldsunC。让我们一起进步吧!元组、列表、字典、集合元组和列表是Python语言中非常重要的一部分内容,它们是Pytho
989ea1c61305d73ba56dd8d001a96fc7.png
​你好,我是goldsunC
让我们一起进步吧!

元组、列表、字典、集合

  • 元组和列表是Python语言中非常重要的一部分内容,它们是Python中除了字符串以外的另两种序列结构,几乎在任何地方都少不了它们的使用。而字典是非常具有Python语言特色的一种类型,它与列表类似,但是其中元素的顺序变的无关紧要。

1 列表

1.1 列表的创建

  • 列表可以由[]或者list()创建,它可以由==零个==或者==多个==元素组成,元素之间用逗号隔开,整个列表要被方括号所包裹:

#创建空列表
>>> empty_list = [] # Method one
>>> empty_list = list() # Method two#创建非空列表
>>> friends = ['You','They','Me']

  • 同时,除了我们自己创建列表之外,我们还可以用list()将其它形式的数据类型转换成列表类型:

# 将字符串转换成列表:
>>> list('goldsunC')
['g', 'o', 'l', 'd', 's', 'u', 'n', 'C']# 将元组转换成列表:
>>> tuple = ('You','They','Me')
>>> list(tuple)
['You','They','Me']


1.2 列表的处理

1.2.1 列表分割

  • 在==Python学习笔记==(二)中我写了关于字符串的一些相关处理,其中有一个split()函数可以将字符串进行切割,相似的,这个函数也可以对列表进行切割:

>>> Mybirthday = '11/03/2000'
>>> Mybirthday.split('/')
['11','03'.'2000']
#Tip:一定要注意空格也是字符

1.2.2 提取元素

  • 和字符串类似的,通过偏移位从列表中提取对应位置的元素:

>>> Myname = ['Chang','kang','ning']
>>> Myname[0]
'Chang'
>>> Myname[1]
'kang'
>>> Myname[-1]
'ning'
>>> Myname[-2]
'kang'

引用的偏移位对于待访问列表必须有效——该位置的元素在访问前已经正确赋值,当指定的偏移位小于起始位置或者大于末尾位置时,会产生异常。

  • 同时,也可以指定范围并使用切片提取元素:

>>> Myname = ['Chang','kang','ning']
>>> Myname[0:2]
['Chang','kang']
# 其提取方式与字符串相比是类似的,详细可参考上一章字符串的处理。

1.2.3 修改元素

  • 我们不但可以通过偏移位访问某元素,还可以通过赋值对它进行修改:

>>> emotion =['I','hate','you']
>>> emotion[1]='love' #同样,偏移位的引用也必须时合法的
>>> emotion
['I','love','you']

  • 使用此种方式无法修改列表内字符串中的指定字符,因为字符串本身是不可变的。而列表是可变的,因此你可以修改列表中的元素个数,以及元素的值。

1.3 列表的概念延伸

  • 列表可以包含各种类型的元素,也包括其它的列表,同时也可以对一个有内层列表,并可以在列表内有对象时可以无限层引用,如下例:

#创建列表
>>> Myname = ['Chang','kang','ning']
>>> emotion = ['I','love','you']
>>> friends = ['You','They','Me']
>>> whole = [Myname,emotion,friends,'friendship']
>>> whole
[['Chang', 'kang', 'ning'], ['I', 'love', 'you'], ['You', 'They', 'Me'], 'friendship']
>>> whole[0]
['chang','kang','ning'] #这说明第一个元素还是一个列表,其实它就是Myname
>>> whole[0][0]
'Chang'
>>> whole[1][1]
'love'
>>> whole[1][1][1]
'o'
#这说明第一个[]指向whole的外层列表,而第二个[]指向whole的二层列表,第三个[]指向字符串。

1.4 相关的列表处理函数

函数名称作用append(element)将element添加至列表尾部(其可以是任何元素)extend(list) or +=将list合并至原列表(注意与append区分)insert(offset,element)在offset处插入element(偏移位可以溢出)remove(element)删除原列表中的所有elementpop(offset)(none==-1)获取并删除offset处的元素index(element)查询element在列表中的偏移位count(element)记录element在列表中出现的总次数sort()对列表进行排序同时改变原列表内容(数字升序或者字母升序),降序则在()中写入reverse=Turesorted()返回排好序的列表副本,原列表内容不变len(list)获取list的长度

  • 上边是我整理的一些对列表进行处理的函数,其实还有几个常用函数,因为其引用方式和上边那些稍有不同,因为我单独拿出并举例。

1.5 使用del删除指定位置的元素

#创建列表
>>> friends =['You','They','Me']
>>> del friends[1]
>>> friends
['You','Me']

  • 当列表中的一个元素被删除后,位于它后面的元素会自动往前移动填补空出的位置,且列表长度减1。

1.6 使用join()将列表转换为字符串

#创建一个列表
>>> emotion =['I','love','you']
>>> result =' '.join(emotion)
>>> result
'I love you'

1.7 使用in判断值是否存在于列表

#创建一个列表
>>> emotion =['I','love','you']
>>> 'love' in emotion
True
>>> 'hate' in emotion
False#一个列表中可能存在多个相同的值,但只要至少出现一次,in就会返回 True

1.8 使用=赋值,使用copy()复制

  • 在这里我觉得有必要解释一下,在Python语言中,所有数据都是以==对象==的形式存在的,Python中的变量仅仅是一个名字,赋值操作并不会实际复制值,它只是为数据对象取了一个名字而已,名字是对对象的引用而不是对象本身。
  • 下面举个例子更好理解:

>>> a =[1,2,3,4,5]
>>> b =a
>>> b
[1,2,3,4,5]
>>> b[0]=0
>>> b
[0,2,3,4,5]
>>> a
[0,2,3,4,5]

  • 如上例所示,a对b的赋值仅仅是值从新在a所指对象的身上贴上了b的标签,赋值后a和b实际指向的是一个对象,因此无论是通过a还是通过b来修改其所指对象的内容,其结果都会作用于双方。

如果想将一个列表的值复制到另一个新的列表中,可以采用以下三种方法:

  • 列表copy()函数
  • list()转换函数
  • 列表分片[:]

>>> a =[1,2,3,4,5]
>>> b =a.copy()
>>> c =list(a)
>>> d =a[:]
>>> a,b,c,d
([1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5])

使用这三种方法产生的b、c、d都是a的复制,它们是自身带有值得新对象,与原始的a所指向的对象没有任何关联,此时改变任何一个对象的值都不影响其它对象。


2 元组

  • 其实元组和列表是非常相像的一种数据类型,其最大的不同便是:元组是不可变的。这意味着元组一旦被定义,将无法再进行增加、删除或者修改元素等操作。相对来说,元组就像一个常量列表。因为元组与列表非常相似,接下来只介绍一下元组的创建以及和列表对比的一些特点。

2.1 元组和列表各组特点

  • 在许多地方都可以用元组代替列表,但元组的方法函数比列表要少很多:比如没有append()、insert()等函数,因为创建了元组之后便无法修改了,因此没有这些函数。那既然列表更加灵活,为什么不在所有地方都应用列表呢?有以下几点原因:

1.元组占用的空间较小2.你不会意外修改元组的值以便防止程序发生雪崩式的漏洞3.可以将元组作为字典的键4.命名元组可以作为对象的替代5.函数的参数是以元组的形式传递的

2.2 元组的创建

创建一个空元组用():

>>> empty_tuple =()
>>> empty_tuple
()

创建一个或者多个元素的元组时,每一个元素后面都要跟着一个逗号,即使只包含一个元素也不能省略,当创建的元组包含的元素大于1时,最后一个元素后面的逗号可以省略:

>>> Myname ='ChangKangning',
>>> Myname
('ChangKangning',)
>>> Myname ='Chang','kang','ning'
>>> Myname
('Chang','kang','ning')

在Python的解释器中输出元组时总会自动添加一对圆括号,而我们并不需要这样做-因为定义元组真正靠的是每个元素的后缀-“逗号”,不过你愿意加一对圆括号也可以,这样也会使得程序更加的清晰。

  • 可以一口气将元组赋值给多个变量:

>>> Myname ='Chang','kang','ning'
>>> a,b,c =Myname
>>> a
'Chang'
>>> b
'kang'
>>> c
'ning'#这个过程也被称作“元组解包”

  • 同时,利用tuple()函数也可以将其他类型的数据转换成元组:

>>> Myname =['Chang','kang','ning']
>>> tuple(Myname)
('Chang','kang','ning')

3 字典

  • 字典与列表类似,但是其中的元素顺序变的无关紧要,因为字典并不是靠偏移位来访问的,每个元素不必被编相应的顺序序号。取而代之,每个元素拥有与之对应的互不相同的键(key),需要通过键来访问元素,键通常是字符串,但它还可以是Python中其他任意的不可变类型:布尔型、浮点型、元组、字符串,以及其他一些相关类型。而字典本身是可变的,因此你可以增加、删除或修改其中的键值对

3.1 字典的创建

3.1.1 使用{}创建字典

  • 使用大括号{}将一系列以逗号隔开的键值对(key:value)包裹起来即可进行字典的创建:

>>> empty_dict ={}
>>> empty_dict
{}
>>> a_dict ={'Myname':'ChangKangning','Yourname':'XXX'}
>>> a_dict
{'Myname': 'ChangKangning', 'Yourname': 'XXX'}

  • Python允许在列表、元组、或者字典的最后一个元素后面添加逗号,这不会产生任何问题。此外,在括号之间输入键值对来创建字典时并不强制要求缩进。

3.1.2 使用dict()转换为字典

  • 可以对任何包含双值子序列的序列使用dict()将其转化为字典:

#包含双值元组的列表
>>> example =[('C','Chang'),('K','Kang'),('N','Ning')]
>>> dict(example)
{'C': 'Chang', 'K': 'Kang', 'N': 'Ning'}#另外其它包含双值列表的元组、双字符的字符串、双字符串组成的元组等都可以
# 转化为字典,在此不一一举例。

3.2 字典的处理

3.2.1 使用方括号[]添加或者修改元素

  • 我们已经知道字典是由一对对的键值对组成,而向字典中添加元素非常简单,只需要指定该元素的键并赋予相应的值即可。如果该键已经有值,其将被新值取代,如果没有此键,此键值对将被加入字典。

>>> name_dict ={'C':'Chang','K':'Kang'}
>>> name_dict
{'C':'Chang','K':'Kang'}
>>> name_dict['N']='Ning'
>>> name_dict
{'C': 'Chang', 'K': 'Kang', 'N': 'Ning'}

  • 因为我们引用的是字典中键值对的键,因此我们需要知道,每个字典中包含的必须保证互不相同。

3.2.2 一些常用的字典处理函数

函数名称作用update(other_dict)将other_dict中的键值对复制到原字典del dict['key']删除dict中key的元素(类似列表中的del)clear()将字典中的所有元素删除’key‘ in dict判断key是否在字典中keys()获取字典中的所有values()获取字典中的所有items()获取字典中的所有键值对

3.2.3 特别的处理方法

  • 与列表类似,同样的使用方括号[]来获取元素。
  • 在对字典的操作中,只需要指定字典名字即可得到对应的:

>>> name_dict ={'C':'Chang','K':'Kang','N':'Ning'}
>>> name_dict['C']
'Chang'

  • 注意,如果在操作的字典中不包含指定的键,则系统会报错而并不是返回空,而有两种方法可以避免这种情况发生:
  • 1. 用3.2.2表中的in判断此键是否存在。
  • 2. 使用字典函数get(),你在使用时需要指定字典名、键、以及一个可选值。如果键存在,会返回其对应值。如果不存在,则返回这个可选值。

如下:

>>> name_dict ={'C':'Chang','K':'Kang'}
>>> name_dict.get('K','none')
'Kang'
>>> name_dict.get('N','none')
'none'

  • 与列表一样,对字典内容信息的修改会反映到所有与之相关联的变量名上,若想避免此种情况,则还是需要用copy()函数将字典复制到一个新字典中。

4 集合

  • 对于元组和列表我们知道,元组就像是不会改变的列表,其性质非常相似,而对于字典与集合来讲,集合就像舍弃了值,仅剩下键的字典一样。集合里边的元素不允许重复,同时也没有顺序。如果你仅仅向知道某一个元素是否存在而不关心其他的东西,使用集合是一个非常好的选择。

4.1 集合的创建

4.1.1 使用set()函数创建集合

  • 我们可以使用set()函数创建一个集合,或者用大括号将一系列以逗号隔开的值包裹起来创建集合。如下所示:

>>> empty_set =set()
>>> empty_set
set()
>>> a_set ={1,2,3,4,5}
>>> a_set
{1,2,3,4,5} #虽然此时返回的值看似有序,但一定注意集合是无序的!!!

  • 注意,空集合的创建并不是之间使用一个大括号就行了,大括号是用来创建字典的,为了避免与空字典的重复,解释器输出的空集合是set(),这样规定没有什么特殊原因,仅仅是因为字典的出现比较早吧。

4.1.2 使用set()将其他类型转换为集合

这里没什么好解释的,直接上例子:

>>> set('ning')
{'i','n','g'}#如上所示,两个n变成了一个#将列表转换为集合
>>> set(['Chang','kang','ning'])
{'ning', 'Chang', 'kang'}#将元组转换为集合
>>> set(('Chang','kang','ning'))
{'ning', 'Chang', 'kang'}#当字典作为参数传入set()函数时,只有键会被使用:
>>> set({'C':'Chang','K':'Kang','N':'Ning'})
{'C','K','N'}

4.2 集合的处理

  • 前边已经说过,集合里面的元素是无序的、唯一的,因此我们最常用的功能是判断元素是否存在于目标集合。

4.2.1 使用in判断测试值是否存在

#我们先建立一个字典,字典里边的值为集合
>>> a_dict ={'C':{'C','h','a','n','g'},'K':{'K','a','n','g'},'N':{'N','i','n','g'}}
>>> for i,j in a_dict.items():if 'a' in j:print(i)
'C'
'K'

4.2.2 集合相关处理函数

函数名称作用intersection(set)获取原集合与set的交集&同上union(set)获取原集合与set的并集|同上difference(set)获取原集合与set的差集-同上symmetric_difference(set)获取原集合与set的异或集(仅在两个集合中出现一次)^同上issubset(set)判断原集合是否为set的子集<&#61;同上<判断真子集issuperset(set)判断原集合是否为set的超集> &#61;同上>判断真超集


总结

  • 到此为止&#xff0c;关于元组、列表、字典、集合的常用相关基础知识已经全部敲出来了&#xff0c;说实话这些东西看的时候可能一个小时就能看完&#xff0c;但是要敲出来得需要一天&#xff0c;不过在敲的过程中确实加强了很多&#xff0c;毕竟那些举得例子大多需要在解释器里运行一下&#xff0c;有时候出个错也能更掌握相关知识点&#xff0c;这篇文章对我自己肯定有帮助&#xff0c;希望也能帮到看到的你。

• end •

走在路上

goldsunC

微信搜索&#xff1a;goldsunC爱编程

给你分享我学习Python过程中学到的知识&#xff0c;带你走进Pythton的大门&#xff0c;更多有用知识等你来关注哦~



推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • UNIX高级环境编程 第11、12章 线程及其属性
    第11章线程11.2线程概念线程资源:线程ID,一组寄存器,栈,调度优先级和策略,信号屏蔽字,e ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • MySQL外键1对多问题的解决方法及实例
    本文介绍了解决MySQL外键1对多问题的方法,通过准备数据、创建表和设置外键关联等步骤,实现了用户分组和插入数据的功能。详细介绍了数据准备的过程和外键关联的设置,以及插入数据的示例。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
author-avatar
手机用户2502920645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有