Python学习之元组

元组

元组类比与列表

既有列表一样:同时容纳多种类型的对象

也有字符串一样:不可变的特性

和列表的差别:

列表:[元素1,元素2,元素3,…]

元组: (元素1,元素2,元素3,…])

列表用的是方括号[]

元组用的是圆括号()

类比列表的的一些例子:

# 创建一个元组
>>> rhyme = (1,2,3,4,5,"上山打老虎")
	     
>>> rhyme
	     
(1, 2, 3, 4, 5, '上山打老虎')

>>> rhyme = 1, 2, 3, 4, 5, "上山打老虎" # 元组也可以不带括号,带上逗号。
	     
>>> rhyme
	     
(1, 2, 3, 4, 5, '上山打老虎')
>>> rhyme[0]
	     
1
>>> rhyme[1]    # 与列表相同的索引来查找元素
	     
2
>>> 

# ------------------------------ 元组里的元素是不可被修改的,否则会报错
>>> rhyme[1] = 10
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    rhyme[1] = 10
TypeError: 'tuple' object does not support item assignment
>>> 
# 对元组切片
>>> rhyme[:3]
(1, 2, 3)
>>> rhyme[3:]
(4, 5, '上山打老虎')
>>> rhyme[:]
(1, 2, 3, 4, 5, '上山打老虎')
>>> 

# count()方法和index()方法

>>> nums = (3, 1, 9, 6, 8, 3, 5, 3)
>>> nums.count(3)   # 计算元组内3的个数
3

-------
>>> heros = ("蜘蛛侠","绿巨人","黑寡妇")
>>> heros.index("黑寡妇")  # 得出黑寡妇的索引
2



元组的加号和乘号(拼接和重复)

>>> s = (1, 2, 3)
>>> t = (4, 5, 6)
>>> s + t
(1, 2, 3, 4, 5, 6)
>>> s * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> 

元组的嵌套:直接加逗号,逗号也是元组的基本条件。

>>> w = s, t
>>> w
((1, 2, 3), (4, 5, 6))
>>> 

元组的迭代

>>> for each in s:
	print(each)

	
1
2
3
>>> 
>>> for i in w:
	for each in i:
		print(each)

		
1
2
3
4
5
6
>>> 
# 元组同样可以用到列表推导式,只不过最后变成了列表了。如果将列表推导式中的方括号改为圆括号并不会出现元组推导式,会报错。

>>> s = (1, 2, 3, 4, 5)
>>> [each * 2 for each in s]
[2, 4, 6, 8, 10]
>>> 

圆括号的必要性

在不引起歧义的情况下,Python允许你不加。

但最好还是加上,可增加代码的可读性以及更加规范。

如何生成只有一个元素的元组

>>> x = (520)   # 直接这么写是错误的,查看类型只会是整数型
>>> type(x)
<class 'int'>
>>> x = (520,)  # 加上逗号,查看类型就是元组。
>>> type(x)
<class 'tuple'>
>>> 

打包和解包(适用于包括元组、列表、字符串在内的序列)

打包和解包

就是将不同类型的数据放在一个序列里:

>>> t = (123, "FischC", 3.14)
>>> x, y, z = t

# 以上为打包
# ------------------------------
# 以下为解包

>>> x
123
>>> y
'FischC'
>>> z
3.14
>>> a, b, c, d, e = "FishC"
>>> a
'F'
>>> b
'i'
>>> c
's'
>>> d
'h'
>>> e
'C'
>>> 

但无论使用哪一种序列的解包,赋值号左边的变量名数量必须跟右侧序列的元素数量一致,否则就会报错。

>>> a, b, c = "FishC"
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    a, b, c = "FishC"
ValueError: too many values to unpack (expected 3)
    
    
>>> a, b, *c = "FishC"
>>> a
'F'
>>> b
'i'
>>> c
['s', 'h', 'C']
>>> 

Python的多项赋值就是依靠的解包。

x,y = 10, 20

-------------
>>> _ = (10,20)
>>> x, y = _
>>> x
10
>>> y
20
>>> 

元组真的就固若金汤了吗?

>>> s = [1,2,3]
>>> y = [4,5,6]
>>> w = (s,t)
>>> w[0][0] = 0
>>> w
([0, 2, 3], (123, 'FischC', 3.14))
>>> s = [1,2,3]
>>> t = [4,5,6]
>>> w = (s,t)
>>> w
([1, 2, 3], [4, 5, 6])
>>> w[0][0] = 0   
>>> w
([0, 2, 3], [4, 5, 6])
>>> 

元组的元素是不可变的,如果元组里的元素指向的是一个可变的列表,那么我们还是可以修改的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值