首页 > 编程知识 正文

python 元组索引,python 元组 修改

时间:2023-05-04 23:41:51 阅读:230196 作者:3248

首先,元组不仅仅是不可变的列表。除了用作不可变的列表,它还可以用于没有字段名的记录。

元组和记录
元组其实是对数据的记录:元组中的每个元素都存放了记录中一个字段的数据,外加这个字段的位置。正是这个位置信息给数据赋予了意义,如果在任何的表达式里我们在元组内对元素排序,这些元素所携带的信息就会丢失,因为这些信息是跟它们的位置有关的。
元组拆包
我们把元组 里的元素分别赋值给变量的过程就叫做元素拆包,例如:
city, year, pop, chg, area = (‘Tokyo’, 2003, 32450, 0.66, 8014)

元组拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。或者除非我们用 * 来表示忽略多余的元素。例如:a, b, *rest = range(5)。

在进行拆包的时候,我们不总是对元组里所有的数据都感兴趣,_ 占位符能帮助处理这种情况,例如:
_, filename = os.path.split(’/home/luciano/.ssh/idrsa.pub’) (但如果做的是国际化软件,那么 _ 可能就不是一个理想的占位符,因为它也是gettext.gettext 函数的常用别名)

在 Python 3 之前,元组可以作为形参放在函数声明中,例如 def fn(a, (b, c), d):。然而 Python 3 不再支持这种格式,具体原因见于“PEP 3113—Removal of Tuple Parameter Unpacking”(http://python.org/dev/peps/pep-3113/)。

元组已经设计得很好用了,但作为记录来用的话,还是少了一个功能:我们时常会需要给记录中的字段命名。namedtuple 函数的出现帮我们解决了这个问题。

具名元组
collections.namedtuple 是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类——这个带名字的类对调试程序有很大帮助。(用 namedtuple 构建的类的实例所消耗的内存跟元组是一样的,因为字段名都被存在对应的类里面。这个实例跟普通的对象实例比起来也要小一些,因为Python 不会用 dict 来存放这些实例的属性。),例如:
from collections import namedtuple
Card = collections.namedtuple(‘Card’, [‘rank’, ‘suit’])
City = namedtuple(‘City’, ‘name country population coordinates’)
tokyo = City(‘Tokyo’, ‘JP’, 36.933, (35.689722, 139.691667))

在这里可以通过字段名或者位置来获取一个字段的信息。

除了从普通元组那里继承来的属性之外,具名元组还有一些自己专有的属性。主要有 : _fields 类属性、类方法_make(iterable) 和实例方法 _asdict()。
1,_fields 属性是一个包含这个类所有字段名称的元组。
2,用 _make() 通 过 接 受 一 个 可 迭 代 对 象 来 生 成 这 个 类 的 一 个 实 例, 它 的 作 用 跟City(*delhi_data) 是一样的。
3,_asdict() 把具名元组以 collections.OrderedDict 的形式返回,我们可以利用它来把元组里的信息友好地呈现出来。

作为不可变列表的元组
元组和列表对比:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。