Python-数据类型-元祖

均衡侠
• 阅读 961

数据类型-元祖

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

1. 特点

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

示例

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

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

# 空元祖
t3 = ()

# 特殊定义
t4 = 1,2,3,4
print(type(t4))
# <class 'tuple'>
如果定义的元组只有一个数据,那么这个数据后面也要添加逗号,否则为直接当成()运算符使用
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 埃莱娜·费兰特
"""
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java通过sina端口提取股票历史数据并存入MySQL
 1.提取股票代码代码见:http://www.oschina.net/code/snippet\_2688840\_55337(http://www.oschina.net/code/snippet_2688840_55337) 2抓取sina股票的json页面数据;代码见:http://www.oschina.net/code/snip
Wesley13 Wesley13
3年前
java 反射得到属性与属性值
<divid"cnblogs\_post\_body"class"blogpostbody"<p反射可以破坏所有的封装性,比如这次通过反射得到的属性与属性值;</p<divclass"cnblogs\_code"<divclass"cnblogs\_code\_toolbar"<spanclass"cnblogs\_co
虾米大王 虾米大王
3年前
java代码092
code092.jsp通过FindServlet类查询分页数据所有图书信息ID图书名称价格数量作者<%Listlist1(List)request.getAttribute("list");for(code089book:list1)%
虾米大王 虾米大王
3年前
java代码099
code099.jspInserttitlehere$pageScope.user.name
虾米大王 虾米大王
3年前
java代码018
code018.jsp写入cookiewindow.location.href"code017.jsp";
虾米大王 虾米大王
3年前
java代码037
code038.jsp邮箱地址验证<%Stringmailaddressrequest.getParameter("mailaddress");code039emailnewcode039(mailaddress);//cls001类if(email.checkEmail())out.println(mailaddress
Wesley13 Wesley13
3年前
JAVA_将二进制流转换成图片文件
_1. __\代码\_将二进制流转换成图片文件晚风工作室www.soservers.com    _跳至\1\(http://www.oschina.net/code/snippet_931591_1760429253)\全屏预览\(http://www.oschina.net/code/piece_full?code17
Stella981 Stella981
3年前
PHP返回Json数据函数封装
/返回Json数据@paramint$code@paramstring$message@paramarray$data@returnstring/publicfunctionretJson($code,$message'
Wesley13 Wesley13
3年前
Oracle:Pivot 转多列并包含多个名称
SELECTFROM(SELECTl.DISTRIBUTOR_ID,d.SKU_CODE,d.WH_CODE,d.ORDER_PACKAGES,d.PRICE,d.YEARLY||d.MONTHLYasYM,d
Stella981 Stella981
3年前
Code
ylbtechCodeNFine:NFine介绍1\.NFine平台介绍返回顶部1、使用时请务必保留来源,请勿用于违反我国法律的web平台、如诈骗等非法平台网站。版权最终解释权归《NFine团队》所有NFine是一套基于ASP.NETMVCEF6Bootstrap开发出来的框架,源代码完全开源,可以帮助你解
Stella981 Stella981
3年前
Python code question 1
Question1Level1Question:Writeaprogramwhichwillfindallsuchnumberswhicharedivisibleby7butarenotamultipleof5,between2000and3200(bothincluded).The