0
点赞
收藏
分享

微信扫一扫

【Python数据分析基础-4】数据结构之元组


【Python数据分析基础-4】数据结构之元组

0. 引入

从这篇文章开始,我将介绍Python的常用的数据结构:元组、列表、字典和集合。这篇文章中,将会着重介绍元组。​元组是一种固定长度、不可变的Python对象序列。

1. 创建元组

元组最简单的创建方法是用逗号分隔序列值,如下:

tup = 1, 2, 3
tup

  • 时间戳
  • 格式化的时间字符串
  • time模块的time.struct_time类
  • datetime模块的datetime类

其中​时间戳(imestamp)​ 又称为Unix时间、POSIX时间。它表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。 但Python返回的是秒数,需要说明的是时间戳是个差值,其值与时区无关。

格式化的时间字符串是形如’2022-01-01 13:14:52’的字符串

time模块和datetime模块我将在下面进行介绍。

# 结果为
(1, 2, 3)

元组的元素设置比较自由,当你想通过更复杂的表达式来定义元组时,将各具体元素用逗号隔开即可,如下:

tup1 = [1, 2], (3, 4)
tup2 = (5, 6), (7, 8)
tup3 = [9, 10], True, 0
print(tup1, type(tup1))
print(tup2, type(tup2))
print(tup3, type(tup3))
# 结果为
([1, 2], (3, 4)) <class 'tuple'>
((5, 6), (7, 8)) <class 'tuple'>
([9, 10], True, 0) <class 'tuple'>

当然,你也可以通过​​tuple​​函数将任意序列或迭代器转换为元组:

print(tuple([1, 2, 3, 4]))
print(tuple('tuple'))
# 结果为
(1, 2, 3, 4)
('t', 'u', 'p', 'l', 'e')

2.元组元素操作

元组中的元素可以通过​​中括号[]​​来获取,当然,在大多数序列类型中都可以使用该方法。​Python中的序列索引时从0开始​。

tup3 = [9, 10], True, 0
print(tup3[0])
# 结果为
[9, 10]

元组一经创建,各个位置上的对象是无法被修改的!!!!但是对象其自身是可变的!

tup = [1, 2, 3, 4, 5], True, 0, 'tuple'
print(tup[0])
print(tup[2])
# 结果为
[1, 2, 3, 4, 5]
0

下面我们尝试修改一下元组中的对象,将元组的第三个元素变为1:

tup[2] = 1
# 结果为
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-bb6d2a2e4378> in <module>
----> 1 tup[2] = 1

TypeError: 'tuple' object does not support item assignment

报错了​​TypeError: 'tuple' object does not support item assignment​​,表示“tuple”对象不支持元素分配,即你不可修改元组各位置的对象!

但是如果元组中储存的对象其自身是可变的,例如列表,你可以在它内部进行修改​,如下:

tup[0].append(6)
tup
# 结果为
([1, 2, 3, 4, 5, 6], True, 0, 'tuple')

可以发现​​tup[0]​​​是列表​​[1, 2, 3, 4, 5]​​​,​​tup[0].append(6)​​​即在列表后面加入元素​​6​​.

除此之外,可以用​​+​​号连接元组来生成更长的元组:

tup1 = [1, 2], (3, 4)
tup2 = (5, 6), (7, 8)
tup3 = [9, 10], True, 0
tup1 + tup2 + tup3
# 结果为
([1, 2], (3, 4), (5, 6), (7, 8), [9, 10], True, 0)

又可以将元组乘以整数,生成含有多份拷贝的元组:

tup1 * 5
# 结果为
([1, 2],
(3, 4),
[1, 2],
(3, 4),
[1, 2],
(3, 4),
[1, 2],
(3, 4),
[1, 2],
(3, 4))

3. 元组拆包

如果你想要将元组型的表达式赋值给变量,Python会对等号右边的值进行​拆包​:

tup = (1, 2, 3)
a, b, c = tup
print(b)
# 结果为
2

即使是嵌套元组也可以进行拆包:

tup = 1, 2, (3, 4)
a, b, (c, d) = tup
print(c)
# 结果为
3

拆包功能,是你可以轻易地交换变量名,在其他编程语言中,更换变量名可能需要一个中间变量,但在Python中交换可以如下完成:

a, b = 1, 2
b, a = a, b
a, b
# 结果为
(2, 1)

Python提供了更为高级的元组拆包功能,这个功能使用特殊的语法"*rest",用于在函数调用时获取任意长度的位置参数列表:

tup = 1, 2, 3, 4, 5, 6
a, b, *rest = tup
print(a, b)
print(rest)
# 结果为
1 2
[3, 4, 5, 6]

“rest"这个变量名并不是固定的,没有什么特殊之处,你也可以把*后面的rest换成其他变量名。不过为了方便,很多编程者会使用下划线”_"来表示不要的变量,如下:

tup = 1, 2, 3, 4, 5, 6
a, b, *_ = tup
print(_)
# 结果为
[3, 4, 5, 6]

需要注意的是这个高级拆包功能返回的是一个​列表​,而不是元组。

4. 元组方法

由于元组的内容是无法改变的,它的实例方法很少,一个常见的方法是count,用于计量某个数值在元组中出现的次数:

a = (1, 1, 2, 3, 1, 4, 5, 1)
a.count(1)
# 结果为
4

下一篇我将介绍数据结构中的​列表​!



举报

相关推荐

0 条评论