数据结构论坛

注册

 

发新话题 回复该主题

Python必备进阶技能定制一个可修改的 [复制链接]

1#
白癜风的治疗药物 http://www.bdfyy999.com/m/

,我们详细了解了从Python的序列中筛选数据的几种方式,并对比介绍了使用这几种方式的效率(不要总抱怨它慢了突破性能瓶颈找到Python序列筛选数据的最优解)。今天,我们来看另一个关于Python中元组使用的例子。

Python

问题提出

从我们知道,我们筛选元组中的所需要的数据时,其速度明显快于同样长度的列表。当我们使用爬虫获取数据或者使用csv文件打开一个类似数据集时,通常需要对一个序列中的内容进行解析,比如我们获取到的数据集information,我们需要提取info1、info2、info3等内容,我们一般会像下面这样进行编码:

info1=information[0]

info2=information[1]

info2=information[2]

这样的代码,虽然能够有效获取到数据内容,但是程序的可读性是很差的。如果有这样一种数据结构:既能有效存储我们需要的序列信息;又能将序列中每一项内容进行标记(而不是使用1、2、3这样的索引信息)。这样的数据结构技能满足良好的可读性,又能有效解决我们的问题。改进后的代码如下。

name=information[NAME]

age=information[AGE]

sex=information[SEX]

代码改成这样也是可用的,但是,我们还需要将NAME、AGE、SEX三个属性分别定义为0、1、2,代码如下:

NAME、AGE、SEX=0,1,2

这样,我们的需求就解决了。从博文我们知道,如果要想使程序性能快一点,最好还是使用Python内置的数据结构来解决问题。Python有没有提供相应的数据结构呢?

有没有更好的办法呢?

解决问题

细心的读者肯定会发现,上面的问题创建类和使用字典都是可以解决的。但是,还有没有别的办法呢?

Python中collections模块中提供了一个namedtuple()函数,用来生成类似元组的数据结构,这种数据结构有以下优点:

具有元组的一切优点(废话),能够用索引来访问数据,能够迭代能够使用属性名来索引访问数据一个可以修改的tuple一个可以转化为字典的元组(方便属性值的修改)它是什么?

下面截图来详细了解下它到底是什么?

namedtuple详解

如何创建?

上面的例子涉及了它的部分用法,我们来详细了解一下。

namedtuple的其它用法

如何修改这种tuple的属性?

我们来看一下如何像使用字典一样修改它的任意属性。具体有两种办法:一是使用实例名称.属性名称的方式;另一种就是将它转化为字典后直接通过修改字典键值对的方式来修改,示例代码如下。

直接修改tuple的方法

使用场合

我们知道,python原生数据结构tuple是无法修改其内容的,如果使用namedtuple来创建一个类似tuple之后,它里面的内容不仅可以通过属性值进行索引,而且,更好的地方在于,它可以像自定义类和字典一样对属性进行设置。这样,进一步扩充了Python原生数据结构tuple的功能。何乐而不为呢?在需要大量索引tuple内容(尽量避免使用序号进行索引以增加程序可读性)或者是需要临时修改tuple中某一个值(再创建一个tuple会增加内存使用量)的时候,建议使用namedetuple来创建这种数据结构。

建议大家项目中多使用这种结构

好了,今天的内容就到这里了,这项技能你get到了吗?在爬虫数据处理和其它项目数据处理过程中,我们使用nametuple()来创建的数据结构,不仅能提高程序的可读性,而且这种结构的性能也是毋庸置疑的(比较自定义的类)。因此,建议大家多用这种结构的数据类型。

喜欢的朋友们点个赞加

分享 转发
TOP
发新话题 回复该主题