python之元组

本文详细介绍了Python中元组与列表的不同点,包括定义方式、可变性、操作方法等,并展示了它们的共同点,如下标访问、切片、计数和索引方法、拼接和重复操作以及嵌套和迭代。此外,还讲解了如何生成单元素元组、打包和解包的概念以及多重赋值的原理。虽然元组本身不可变,但当元组包含可变对象如列表时,可以通过修改列表来间接修改元组。
摘要由CSDN通过智能技术生成


  元组既能像列表那样同时容纳多种类型的对象,也拥有字符串不可变的特性。

1 元组和列表的不同点

   ∙ \bullet 列表是使用方括号,元组则是圆括号(也可以不带圆括号)

>>> tuple = (1, 2, 3, "hello", "world", "中国人")
>>> tuple
(1, 2, 3, 'hello', 'world', '中国人')
>>> tuple = 1, 2, 3, "hello", "world", "中国人"
>>> tuple
(1, 2, 3, 'hello', 'world', '中国人')
>>> 

   ∙ \bullet 列表中的元素可以被修改,而元组不行

>>> tuple = (1, 2, 3, "hello", "world", "中国人")
>>> tuple[0] = 0
Traceback (most recent call last):
  File "<pyshell#154>", line 1, in <module>
    tuple[0] = 0
TypeError: 'tuple' object does not support item assignment
>>> 

   ∙ \bullet 列表中涉及到修改元素的方法(增、删、改)元组均不支持

   ∙ \bullet 列表的推导式叫列表推导式,元组的 “推导式” 叫生成器表达式

>>> tuple = (1, 2, 3, 4, 5)
>>> [each * 2 for each in tuple]
[2, 4, 6, 8, 10]
>>> (each * 2 for each in tuple)
<generator object <genexpr> at 0x0000022C591D20B0>
>>> 

2 元组和列表的相同点

   ∙ \bullet 都可以通过下标获取元素

>>> tuple = (1, 2, 3, "hello", "world", "中国人")
>>> tuple[0]
1
>>> tuple[5]
'中国人'
>>> tuple[-1]
'中国人'
>>> 

   ∙ \bullet 都支持切片操作,因为切片的含义是将目标对象中的元素以某种特定的组合导出,而非修改对象本身。

>>> tuple = (1, 2, 3, "hello", "world", "中国人")
>>> tuple[:3]
(1, 2, 3)
>>> tuple[3:]
('hello', 'world', '中国人')
>>> tuple[:]
(1, 2, 3, 'hello', 'world', '中国人')
>>> tuple[::2]
(1, 3, 'world')
>>> tuple[::-1]
('中国人', 'world', 'hello', 3, 2, 1)
>>> 

   ∙ \bullet 都支持 count() 方法和 index() 方法

>>> tuple = (3, 1, 9, 6, 8, 3, 5, 3)
>>> tuple.count(3)
3
>>> tuple = (1, 2, 3, "hello", "world", "中国人")
>>> tuple.index("hello")
3
>>> 

   ∙ \bullet 都支持拼接(+)和重复(*)运算符

>>> tuple1 = (1, 2, 3)
>>> tuple2 = (4, 5, 6)
>>> tuple1 + tuple2
(1, 2, 3, 4, 5, 6)
>>> tuple1 * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> 

   ∙ \bullet 都支持嵌套

>>> tuple1 = (1, 2, 3)
>>> tuple2 = (4, 5, 6)
>>> tuple = tuple1, tuple2
>>> tuple
((1, 2, 3), (4, 5, 6))
>>> 

   ∙ \bullet 都支持迭代

>>> tuple = ((1, 2, 3), (4, 5, 6))
>>> for i in tuple:
	for each in i:
		print(each)
1
2
3
4
5
6
>>> 

3 生成一个元素的元组

  当元组只有一个元素的时候,不要这么写:

>>> x = (520)
>>> type(x)
<class 'int'>
>>> 

而应该这么写:

>>> x = (520,)
>>> x
(520,)
>>> type(x)
<class 'tuple'>
>>> 

或者这么写:

>>> x = 520,
>>> x
(520,)
>>> type(x)
<class 'tuple'>
>>> 

4 打包和解包

  生成一个元组我们有时候也称之为元组的打包:

>>> tuple = (1, 2, 3, "hello", "world")
>>> tuple
(1, 2, 3, 'hello', 'world')
>>> 

  将它们一次性赋值给五个变量名的行为,我们称之为解包:

>>> tuple = (1, 2, 3, "hello", "world")
>>> a, b, c, d, e = tuple
>>> a
1
>>> b
2
>>> c
3
>>> d
'hello'
>>> e
'world'
>>> 

  列表也可以进行解包操作:

>>> list = [1, 2, 3, "hello", "world"]
>>> a, b, c, d, e = list
>>> a
1
>>> b
2
>>> c
3
>>> d
'hello'
>>> e
'world'
>>> 

  字符串也可以进行解包操作:

>>> string = "hello"
>>> a, b, c, d, e = string
>>> a
'h'
>>> b
'e'
>>> c
'l'
>>> d
'l'
>>> e
'o'
>>> 

  需要注意的一点是:不管是哪种序列的解包操作,赋值号左侧的变量名数量,必须跟右侧序列的元素数量一致,否则通常都会报错。有一种特例,可以进行如下操作:

>>> tuple = (1, 2, 3, "hello", "world")
>>> a, b, *c = tuple
>>> a
1
>>> b
2
>>> c
[3, 'hello', 'world']
>>> 

5 多重赋值

>>> x, y = 10, 20
>>> x
10
>>> y
20
>>> 

  上述多重赋值的背后实现逻辑就是先通过元组进行打包,然后再将元组进行解包:

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

6 如何对元组进行修改

  在前面已经介绍过元组中的元素是不可以修改的,但是也有一种特殊情况,如下例子:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = (a, b)
>>> c
([1, 2, 3], [4, 5, 6])
>>> c[0][0] = 0
>>> c
([0, 2, 3], [4, 5, 6])
>>> 

  在上述例子中,首先申明了两个列表,然后把这两个列表放进一个元组,于是这两个列表就成为了元组c的两个元素,在这种情况下,元组就变成可以修改的了。也就是说,元组中的元素是不可以变的,但是当元组中的元素是指向一个可变的列表,那此时就可以修改该列表,从而达到修改元组的目的。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roar冷颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值