Python-元组


元组类似于列表,但其内部元素不可改变
从形式上,元组的所有元素放在一对圆括号中,元素之间使用逗号分隔,如 果元组中只有一个元素则必须在最后增加一个逗号:
(元素1,……,元素n)

元组的创建

1、直接把元组赋值给一个变量

x = (1, 2, 3)
x = (3,) 			#若元组中只有一个元素,必须在后面多写一个逗号
x = () 				#空元组
x = tuple() 		#空元组

2、将其他迭代对象转换为元组

tuple(range(5))

元组的删除

对于已经创建的元组,不再使用时,可以使用del语句将其删除

语法结构: del tuplename (tuplename: 要删除元组的名称)

元组的元素访问

序列操作即可

相关内置函数

很多内置函数的返回值也是包含了若干元组的可迭代对象,例如enumerate()、 zip()等等

list(enumerate(range(5,10))) 
# 结果为[(0, 5), (1, 6), (2, 7), (3, 8), (4, 9)]
zip(range(3), 'abcdefg')
# 结果为[(0, 'a'), (1, 'b'), (2, 'c')]

生成器推导式

生成器推导式的结果是一个生成器对象。生成 器对象类似于迭代器对象,具有惰性求值的特点,只在需要时生成新元素

1、使用生成器对象的元素时,据需要将其转化为列表或元组

g = ((i+2)**2 for i in range(10))      # 创建生成器对象
print(g)
print(tuple(g))                        # 将生成器对象转换为元组
# 结果为(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)
print(tuple(g))
# 结果为()
print(list(g))                         # 生成器对象已遍历结束,没有元素了
# 结果为[]

2、使用生成器对象__next__()方法或内置函数next( )进行遍历

g = ((i+2)**2 for i in range(10))       # 创建生成器对象
print(g.__next__())                     # 使用生成器对象的__next__()方法获取元素
# 结果为4
print(g.__next__())                     # 获取下一个元素
# 结果为9
print(next(g))                          # 使用函数next()获取生成器对象中的元素
# 结果为16
print(25 in g) # 结果为True
print(36 in g) # 结果为True
print(25 in g) # 结果为False

3、使用for循环直接迭代生成器对象中的元素

for item in g:      # #使用循环直接遍历生成器对象中的元素
	print(item, end=' ')
# 结果为4 9 16 25 36 49 64 81 100 121

注: 生成器对象内,被访问过的元素不再存在。filter对象和map对象有相似的特点

x = filter(None, range(20)) #filter对象
5 in x # 结果是True

元组与列表的异同点

相同点

  • 列表和元组都属于有序序列
  • 都支持使用双向索引访问其中的元素
  • 均可使用count()方法统计指定元素的出现次数
  • 均可使用index()方法获取指定元素的索引
  • len()、map()、filter()等大量内置函数和+、+=、in等运算符也都可以作用于列 表和元组

不同点

  • 元组属于不可变(immutable)序列,不可以直接修改元组中元素的值,也无法为 元组增加或删除元素
  • 元组没有提供append()、extend()和insert()等方法,无法向元组中添加元素
  • 元组没有remove()和pop()方法,也不支持对元组元素进行del操作,不能从元组中删 除元素,而只能使用del命令删除整个元组
  • 元组也支持切片操作,但是只能通过切片来访问元组中的元素,而不允许使用切片 来修改元组中元素的值,也不支持使用切片操作来为元组增加或删除元素
  • Python的内部实现对元组做了大量优化,访问速度比列表更快。如果定义了 一系列常量值,主要用途仅是对它们进行遍历或其他类似用途,而不需要对 其元素进行任何修改,那么一般建议使用元组而不用列表
  • 元组在内部实现上不允许修改其元素值,从而使得代码更加安全,例如调用函数时使用元组传递参数可以防止在函数中修改元组,而使用列表则很难保 证这一点
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值