0
点赞
收藏
分享

微信扫一扫

Python 内建数据结构、函数及文件总结——《利用Python进行数据分析》第三章总结笔记

陆公子521 2022-02-03 阅读 33

Python 内建数据结构、函数及文件总结——《利用Python进行数据分析》第三章总结笔记

前言

一、数据结构和序列

1. 元组

从上面的定义,我们可以知道

  1. 长度固定,可以使用 + 或者 * 生成更长的元组
tup = 1, 2, 4

print(tup + (2, 3) * 2) 
  1. 元组不可变

    1. 元组一旦创建,各个位置上的对象是无法被修改的,但是像元组中对象可变,例如列表,则可以在内部修改

      # tuple函数 将任意序列或者迭代数转换成元组
      tup = tuple(['foo', [1, 2], True])
      # tup[2] = False    错误,元组不可变
      tup[1].append(3)
      print(tup)
      
  2. 元素是Python对象,见上面的例子

1.1 元组拆包

# tuple函数 将任意序列或者迭代数转换成元组
tup = tuple(['foo', [1, 2], True])
# tup[2] = False    错误,元组不可变
tup[1].append(3)
print(tup)

a , (b,d,e), c = tup
print(a, b, c, d, e)	

1.2 元组方法

实例方法较少,常见的方法是count方法,用于 计量某个元素在元组中出现的次数:

a = (1, 2, 2,  2, 3, 4, 2)
print(a.count(2))

2. 列表

2.1 增加和移除元素

增加

append和insert

append到将元素添加到列表尾部,而insert则可以在对应位置添加元素

_list = [1, 2, 3, 4]
_list.append(5)
print(_list)
_list.insert(0, 0)
print(_list)
移除

pop和remove

pop对应insert,append对应remove,pop 移除特定位置的元素,remove会找到列表中第一个符合要求的元素并移除。

_list = [1, 2, 3, 4]
_list.append(5)
print(_list)
_list.insert(0, 0)
print(_list)

_list.pop(0)
print(_list)
_list.remove(3)
print(_list)
是否存在

in 和 not, in判断值是否在列表中,not判断是否不在列表

2.2 连接和联合

两种方式: + 和 extend方法

extend 的代价较小,性能更优

2.3 排序

sort 函数,默认会按升序排列

其中的key选项,是一个二级排序,用于生成排序值的函数

b = ['saw', 'small', 'He', 'foxes', 'six']
b.sort(key = len)
print(b)

2.4 二分搜索和已排序列表的维护

python 内建的bisect 模块实现了二分搜索和已排序列表的插值。其中bisect为找到元素应当被插入的位置,并保持序列排序,而insort会将元素插入到相应位置

import bisect
c = [1, 2, 2, 2, 3, 4, 7]
print(bisect.bisect(c, 2))
bisect.insort(c, 6)
print(c)

2.5 切片

使用切片符号可以对大多数序列类型选取子集,它的基本形式就是[start:stop]

其完整形式可以是[start:stop:step],start表示开始位置的索引,stop结束位,step为步进值

3. 内建序列函数

3.1 enumerate

对数据建立索引,会对序列构造应一个字典,元素值 :序列值(索引)

thisList = ['a', 'b', 'v']
mapping = {}
for i, v in enumerate(thisList):
    mapping[v] = i
print(mapping)

3.2 sorted

会返回一个任意序列中的元素新建的已排序列表

print(sorted([43,4, 2,565,3]))

3.3 zip

将序列的元素配对、新建一个元组构成的列表,可以处理任意长度的序列,生成列表长度由最短的序列决定

seq1 = ['foo', 'bar', 'baz']
seq2 = ['one', 'two', 'three']
zipped = zip(seq1, seq2)
print(list(zipped))
seq3 = [False, True]
print(list(zip(seq1,seq2 ,seq3)))

3.4 reversed

就是将序列倒序排列

4. 字典

很好理解就是 C++中的 unordered_map<object, object>, object表示对象类型,字典是键值对结构,键和值都是Python对象

del关键字删除键, pop方法删除值

key方法和value方法会分别提供字典键、值得下迭代器

合并方法为update

4.1 从序列生成字典

mapping = dict(zip(range(5), reversed(range(5))))
print(mapping)

4.2 默认值

4.3 有效的字典类型

其实就是用hash方法检查是否可以哈希化——键必须是不可变的对象

5.集合

无序且元素唯一的容器,和字典类似,但是只有键没有值,创建方式有两种,set方法或者字面值集与大括号的语法。

python集合操作表
函数替代方法描述
a.add(x)N/A将元素x加入到集合a
a.clear()N/A将集合重置为空,清空所有元素
a.remove(x)N/A从集合a移除元素x
a.pop()N/A移除任意元素,如果集合是空集则抛出keyError
a.union(b)a | ba 和 b 中的所有不同元素
a.update(b)a |= b将 a 的内容设置为 a 和 b 的并集
a.intersection(b)a & ba、b中同时包含的元素
a.intersection_update(b)a &= b将a的内容设置为a 和 b 的交集
a.difference(b)a - b在a 不在 b 的元素
a.difference_updated(b)a -= b将 a 的内容设置为在 a 不在b的元素
a.symmsymmetric_difference(b)a^b所有在a或b中,但不是同时在a、b中的元素
a.symmetric_difference_update(b)a ^= b将a的内容设上一行所诉元素
a.issubset(b)N/A如果a包含于b返回True
a.issuperset(b)N/A如果a包含b返回True
a.isdisjoint(b)N/Aa、b没有交集返回True

6. 列表、集合和字典的推导式

strings = ['a', 'bat', 'as', 'car', 'dove', 'python', 'cpp', 'java']

List = [x for x in strings if len(x) > 2]
print(List)

这种推导式可以嵌套!但是如果嵌套层数过多,会影响代码的可读性

二. 函数

1. 命名空间,作用域和本地函数

函数有两种连接变量的方式:全局、本地

而在python中有一种更贴切地描述变量作用域的名称是命名空间。在函数内部,任意变量都是默认分配到本地空间的,本地命名空间是在函数调用时生成,其实做个概念就是笔者在C++面向对象时接触到的内存的栈区。

2. 返回多值

def f():
    a = 5
    b = 6
    c = 7
    return a, b, c

a, b, c = f()

上诉代码其实就是函数 f 返回了一个元组对象,然后元组又按照我们之前所学的方式就是利用元组拆包方式,将函数返回的元组拆分成多个变量接收。

3. 函数是对象

4. 匿名(Lambda)函数

strings = ['foo', 'card', 'bar', 'aaaa', 'abab']

strings.sort(key=lambda x : len(set(list(x))))

print(strings)

5. 柯里化:部分参数应用

6. 生成器

6.1 生成器表达式

gen = (x ** 2 for x in range(5))
print(gen)
print(list(gen))

7. 错误和异常处理

def attempt_float(x):
    try:
        return float(x)
    except:
        return x

print(attempt_float('2343.3243'))
print(attempt_float('sodfnfd'))

三、文件与操作系统

模式描述
r只读模式
w只写模式,创建新文件(清除路径下的同名文件)
x只写模式,创建新文件,但路径下存在同名文件则会创建失败
a添加到已存在的文件(如果不存在则创建)
r+读写模式
b二进制文件模式,添加到别的模式中(rb, wb)
t文件的文本模式(自动将字节解码为Unicode),如果没有指明模式,则默认使用此模式,也可以添加到别的模式中。
举报

相关推荐

0 条评论