3.《Python数据分析》Python数据结构、函数和文件

1 数据结构和序列

元组tuple,小括号定义,固定长度,不可变的Python序列对象

在Python的函数中,参数传入以及结果返回都是以元组的形式实现的

列表list,方括号定义,长度可变,内容可变的Python序列对象

常用的序列函数

  • enumerate()示例:for i, value in enumerate(tuple_or_list)
  • sort():对序列或字符串进行排序
  • zip():对多个序列进行成对地组合(最终长度取决于最短的输入序列)
  • reversed():生成器,从后向前地迭代一个序列

字典dict(重要),大括号定义,以键值对的形式存储一系列Python对象

  • keysvalues是字典的键和值的迭代器方法
  • 两个字典可以通过update进行融合
  • setdefault方法可以设置默认值,或者直接使用带默认值的字典格式defaultdict
  • 字典的值可以是任意Python对象,但键必须要是”可哈希的“(可以使用hash函数来检测一个对象是否是可哈希的/可被作为字典的键,比如列表就是不可以的)

集合set,无序的不可重复的元素集合,支持常见的数学集合操作(交并补)

通过将列表等序列对象转换为集合,可快速实现去重的效果

常见推导式(Comprehensions):

# 列表推导式
[expr for value in collection if condition]
# 字典推导式
set_comp = {expr for value in collection if condition}
# 集合推导式配合map函数
set(map(len, strings)) # 计算每个字符串的长度
# 嵌套推导式
result = [name for names in all_data for name in names if name.count('e') >= 2]

建议熟练地掌握以上数据结构相关的增删改查、切片、拼接、排序、格式转换等技巧

2 函数

基本结构:

def my_function(x, y, z=1.5):
    if z > 1:
        return z * (x + y)
    else:
        return z / (x + y)
  • 其中xy是位置参数,z是可选参数
  • 在一些不需要返回的函数中,return可以忽略
  • return结果可以为空,也可以是多个值(会被拼接为元组返回)

Python通过命名空间(namespace)限制变量的作用域

  • 函数中定义的变量都被分配到局部命名空间中,不可在外部被访问
  • global关键字可以在函数内定义全局变量(一般不推荐使用,容易乱)

对于一次性的简单函数,可以使用匿名(lambda)函数:

def apply_to_list(some_list, f):
    return [f(x) for x in some_list]

ints = [4, 0, 1, 5, 6]
apply_to_list(ints, lambda x: x * 2)

Python中的许多对象(如列表或字典)都支持迭代,生成器(generator)是构造可迭代对象常用方法:

def squares(n=10):
    print('Generating squares from 1 to {0}'.format(n ** 2))
    for i in range(1, n + 1):
        yield i ** 2 # 将函数中的return替换为yeild,便可创建一个生成器

另一种构造生成器的简洁方法是使用生成器表达式(generator expression):

gen = (x ** 2 for x in range(100))
gen
# <generator object <genexpr> at 0x7fbbd5ab29e8>

Python内置标准库中的itertools模块,包含了很多用于常见算法的生成器

Python捕捉异常的语法:

f = open(path, 'w') # 创建文件对象(只写模式)

try:
    write_to_file(f)
except:
    print('Failed')
else:
    print('Succeeded')
finally:
    f.close() # 关闭文件并释放资源

文件处理的常用模式:r只读模式、w只写模式(已存在文件会被覆盖)、x只写模式(存在文件时会失败)、a追写模式、r+读写模式、b声明为二进制文件(可配合其他模式,如wbrb

文件处理的常用方法:read读取、readable判断是否可读、readlines按行读取、write写入、writable判断是否可写、writelines按行写入、close关闭文件、flush清空内部IO缓存并写回磁盘、seek移动到文件的指定位置、seekable判断是否可移动、tell以整数形式返回文件位置、closed判断是否已关闭、encoding指定解码格式

注意区分文件的编码格式,对症下药;可通过sys.getdefaultencoding()检查默认的编码格式

往年同期文章