利用Python进行数据分析:内建数据结构、函数及文件(回顾)

本章将讨论贯穿本书要使用的Python语言内建功能。由于像pandas和NumPy这类附加库提供了在大数据集上的高级计算功能,所以它们被设计为与Python内建数据操作工具协同使用。

3.1 数据结构和序列

Python的数据结构简单但强大。精通这些数据结构是成为优秀Python编程者的必要条件。

3.1.1 元组

元组是一种固定长度、不可变的Python对象序列。创建元组最简单的办法就是用逗号分隔序列值

>>> tup = 4, 5, 6
>>> tup
(4, 5, 6)

当你通过更复杂的表达式来定义元组时,通常需要用括号将值包起来,例如下面这个例子。生成了元素是元组的元组:

>>> nested_tup = (4, 5, 6), (7, 8)
>>> nested_tup
((4, 5, 6), (7, 8))

你可以使用tuple函数将任意序列或迭代器转换为元组:

>>> tuple([4, 0, 2])
(4, 0, 2)
>>> tup = tuple('string')
>>> tup
('s', 't', 'r', 'i', 'n', 'g')
>>> tup[0]
's'

元组的元素可以通过中括号[]来获取,在大多数序列类型中都可以使用这个方法。和C、C++、Java以及很多其他语言一样,Python中的序列索引是从0开始的。
虽然对象元组中存储的对象其自身是可变的,但是元组一旦被创建,各个位置上的对象是无法被修改的:

>>> tup = tuple(['foo', [1, 2], True])
>>> tup[2] = False
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    tup[2] = False
TypeError: 'tuple' object does not support item assignment
>>>

如果元组中的一个对象是可变的,例如列表,你可以在它内部进行修改:

>>> tup
('foo', [1, 2], True)
>>> tup[1].append(3)
>>> tup
('foo', [1, 2, 3], True)

可以使用+号连接元组,来生成更长的元组:

>>> (4, None, 'foo') + (6, 0) + ('bar',)
(4, None, 'foo', 6, 0, 'bar')

将元组乘以整数,则会和列表一样, 生成含有多份拷贝的元组:

>>> ('foo', 'bar') * 4
('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')

请注意对象自身并没有复制,只是指向它们的引用进行了复制。如下例所示:

>>> # 对象自身没有复制,而是对“引用”进行了复制
>>> tup = ([1, 2], 'bar') * 4
>>> tup
([1, 2], 'bar', [1, 2], 'bar', [1, 2], 'bar', [1, 2], 'bar')
>>> tup[0].append(3)
>>> tup
([1, 2, 3], 'bar', [1, 2, 3], 'bar', [1, 2, 3], 'bar', [1, 2, 3], 'bar')

3.1.1.1 元组拆包

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

>>> tup = (4, 5, 6)
>>> a, b, c = tup
>>> b
5

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

>>> tup = 4, 5, (6, 7)
>>> a, b, (c, d) = tup
>>> d
7

使用这个功能,你可以轻松地交换变量名。在其它语言中,代码可能如下:

tmp = a; a = b; b = tmp;

但在Python中,交换可以如下完成:

>>> a, b = 1, 2
>>> a
1
>>> a, b = b, a
>>> a
2

拆包的一个常用场景就是遍历元组,或者是列表组成的序列:

>>> seq = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
>>> for a, b, c in seq:
		print('a={0}, b={1}, c={2}'.format(a, b, c))
a=1, b=2, c=3
a=4, b=5, c=6
a=7, b=8, c=9

另一个常用的场景是从函数返回多个值。我将在后续内容详细介绍。

Python语言新增了一些更为高级的元组拆包功能,用于帮助你从元组的起始位置“采集”一些元素。这个功能使用特殊的语法*rest,用于在函数调用时获取任意长度的位置参数列表:

>>> values = 1, 2, 3, 4, 5
>>> a, b, *rest = values
>>> a, b
(1, 2)
>>> rest
[3, 4, 5]

3.1.1.2 元组方法

由于元组的内容和长度是无法改变的,它的实例方法很少。一个常见的有用方法是count(列表也可用),用于计量某个数值在元组中出现的次数:

>>> a = (1, 2, 2, 2, 3, 4, 2)
>>> a.count(2)
4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

弦乐四重奏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值