Python-数据类型-元祖

数据类型-元祖

元祖 是 python 不可变数据类型之一, 元祖由一对()包裹,括号类元素用逗号分隔,元素可以是不同的数据类型,空元祖 可以直接使用一对()号定义,如果元祖只有一个元素,则在元素后面必须加上逗号 例如 ('a',)

1. 特点

  • 元祖是不可变数据类型
  • 元素是有序的序列
  • 元祖也支持索引和切片
  • 相对于列表占用的空间更小

示例

# 多个数据元组
t1 = (10, 20, 30)

# 单个数据元组
t2 = (10,)

# 空元祖
t3 = ()

# 特殊定义
t4 = 1,2,3,4
print(type(t4))
# 
如果定义的元组只有 一个数据,那么这个 数据后面也要添加逗号,否则为直接当成 ()运算符使用
t2 = (10,)
print(type(t2)) # tuple

t3 = (20)
print(type(t3)) # int

t4 = ('hello')
print(type(t4)) # str

元祖的常见操作

  • 按下标查找数据
tuple1 = ('aa', 'bb', 'cc', 'bb')

print(tuple1[0]) # aa
  • index(): 查找某个数据,如果数据存在返回对应的下标否则报错,语法和列表、字符串的index方法相同。
tuple1 = ('aa', 'bb', 'cc', 'bb')

print(tuple1.index('aa')) # 0
  • count(): 统计某个数据在当前元组出现的次数
tuple1 = ('aa', 'bb', 'cc', 'bb') 

print(tuple1.count('bb')) # 2
  • len(): 统计元组中数据的个数。
tuple1 = ('aa', 'bb', 'cc', 'bb')

print(len(tuple1)) # 4
元组内的 直接数据如果修改则 立即报错
tuple1 = ('aa', 'bb', 'cc', 'bb') 

tuple1[0] = 'aaa'
TypeError: 'tuple' object does not support item assignment
如果 元组里面有列表修改列表里面的数据则是支持的,故 自觉很重要
tuple2 = (10, 20, ['aa', 'bb', 'cc'], 50, 30) 

print(tuple2[2])
# 结果: ['aa', 'bb', 'cc']
 
tuple2[2][0] = 'aaaaa' 
print(tuple2)
# 结果:(10, 20, ['aaaaa', 'bb', 'cc'], 50, 30)

3. namedtuple()

namedtuple 是 python 的内置模块 collections提供的创建命名元组子类的工厂函数,可以使用名称来访问元素的数据对象

from collections import namedtuple

BookTuple = namedtuple("Book", ['name', 'price', 'author'])

book = BookTuple('红楼梦', 23, '曹雪芹')

print(book.name, book.price, book.author)
# 结果: 红楼梦 23 曹雪芹
books = [
    ('百年孤独', 30, '加西亚.马尔克斯'),
    ('树上的男爵', 35, '伊塔洛·卡尔维诺'),
    ('那不勒斯四部曲', 76, '埃莱娜·费兰特')
]

BookTuple = namedtuple("Book", ['name', 'price', 'author'])

for book in books:
    book = BookTuple._make(book)
    print(book.name, book.price, book.author)


"""
百年孤独 30 加西亚.马尔克斯
树上的男爵 35 伊塔洛·卡尔维诺
那不勒斯四部曲 76 埃莱娜·费兰特
"""

你可能感兴趣的:(python)