元组和命名元组

一、元组

1、元组的定义

在Python中,元组由内置的tuple类型定义。
创建元组,需要将所有的元组放在圆括号( )内,以逗号分隔。

构造只有一个元素的元组时,括号内只包含一个元素是不够的,需要在其后面加上一个逗号

t=(1)    # 改变优先级 int/str/float ;  
t=(1,)  # 元组类型;

元组中的元素可以有任意多个,并且可以是不同类型的(例如:数字、字符串、列表等):

>>> t = ()                        # 空元组
>>>
>>> t = ('P', 'y')                # 字符串类型元组
>>>
>>> t = (1, 5.5, 'Python')        # 混合类型元组
>>>
>>> t = (6, 'Hello', ('P', 'y'))  # 嵌套元组
>>>
>>> t = 1, 5.5, 'Python'          # 元组可以没有括号,称为元组包装
>>> t
(1, 5.5, 'Python')
>>>
>>> a, b, c = t                   # 元的多元赋值(解包)
>>> a
1
>>> b
5.5
>>> c
'Python'

加法和乘法仍然是可以;
t2 =(2,)
t2+t2      |    (2, 2)

t2*3    |    (2, 2, 2)

2、更改元组

元组是不可变的,也就是说,元组中的元素在被赋值后不能改变。

但是,如果元素本身是一个可变数据类型(例如列表和字典),那么其嵌套项可以被改变,但是id不发生变化

socres = (72, 88, 76, 92, 90, [80,98])
print(id(socres))
socres[5][1] = 99 # 可变元素内部可以改变,但是不能修改不可变元素
print(id(socres))
print(socres)

140423660050256
140423660050256
(72, 88, 76, 92, 90, [80, 99])

3、删除元组

如上所述,不能更改元组中的元素,这也意味着无法删除元组中的元素。
但如果元素本身是一个可变数据类型,那么其嵌套项是可以被删除的,而且使用关键字 del 可以删除整个元组:

socres = (72, 88, 76, 92, 90, [80,98])

# del socres[2]  # 不能删除元素
#TypeError: 'tuple' object doesn't support item deletion

del socres[5][1]  # 可变元素的嵌套项可以被删除
print(socres)   #(72, 88, 76, 92, 90, [80])

del socres  # 删除整个元组
print(socres) # NameError: name 'socres' is not defined

4、列表和元组之间的转换
列表和元组之间可以相互转换,分别使用 tuple() 和 list() 来实现

>>> l = ['H', 'e', 'l', 'l', 'o']
>>> tx = tuple(l)  # 列表转元组
>>> tx
('H', 'e', 'l', 'l', 'o')
>>>
>>> t = ('P', 'y')
>>> lx = list(t)   # 元组转列表
>>> lx
['P', 'y']

二、命名元组
1.顾名思义,就是带有名字的元组,这是什么意思呢?就是取值时不再需要通过下标索引的方式来获取了,可以直接通过字段名来获取值。

定义方式:

collections.namedtuple(typename, field_names)

typename:类名称
field_names: 元组中元素的名称

field_names可以是空白符或逗号分隔的字段的字符串,可以是字段的列表

from collections import namedtuple
# 定义namedtuple类
User = namedtuple("User", 'name gender height weight')

# 或者
# User = namedtuple("User", ['name', 'gender', 'height', 'weight'])

# 初始化namedtuple实例对象
user = User(name="jack", gender="female", height=170, weight=120)

user.name    #'jack'
user.gender   #'female'

定义 namedtuple 时,**第一个参数就是元组的名字,**这里很像我们自定义类中的类名,第二个参数是用空格隔开的字符串(也可以是字符串组成的列表),代表元组中的4个字段,相当于类中的4个属性。

namedtuple其实是继承 tuple 的一个子类,它保留了 tuple 的特性,比如通过索引获取元素,切片功能,同样地,字段不能重新赋值。

你可能感兴趣的:(基本数据类型与高级特性,Python)