Python内置数据结构

xiaoxiao2021-02-28  46

#参考自pythoncookbook第三版

Python中常用的内置数据结构,大多使用的时候都是比较简单的,如list、dict等;对于一些如查询、排序和过滤等,问题会比较多。

关于序列解压:

通常解压一个序列(或者是可迭代对象)可以通过简单的赋值语句解压并赋值,条件是序列元素等于变量个数;

 

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

如果该条件不满足,则报ValueError;

这种方法可以用在任何可迭代的对象上面,包括字符串、文件对象等,所以如果只想解压一部分,可以用任意变量去占位,或者用星号表达式(列表类型);

a, _, c, _ = [1,2,(3,4,5),6] # 必须保证变量名在其他地方没有被使用   record = ('ACME', 50,123.45, (12, 18, 2012)) name, *_, (*_, year) = record

星号分割法实现递归算法:

def sum(items): head, *tail = items return head + sum(tail) if tail else head

保留最后N个元素:

        在迭代操作或者其他操作的时候怎样只保留最后有限几个元素的历史记录?

        使用deque(maxlen=N)构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候,最老的元素会自动移除掉。

from collections import deque dq = deque(maxlen=3) for i in range(10): dq.append(i) print(i) deque([7, 8, 9], maxlen=3)

查找最大或最小的N个元素:

        怎样从一个集合中获取最大或者最小的N个元素列表?

        函数包含参数key,可以使用lamda,用于更复杂的数据结构中(heap使用在数据量小或者N不接近于集合,接近于集合时使用排序之后切片会快一些,注意使用场景)

import heapq myset = {1,2,3,45,56,34,223,56,99,11,23} print(heapq.nlargest(3,myset)) # print [223, 99, 56] print(heapq.nsmallest(3,myset)) # print [1, 2, 3]

        底层实现:

import heapq myset = list({1,45,56,34,223,56,99,11,23}) heapq.heapify(myset) # 需要先进行堆排序 print(heapq.heappop(myset)) # 1 print(heapq.heappop(myset)) # 11 print(heapq.heappop(myset)) # 23

字典高级操作 

#字典键对应容器 from collections import defaultdict d = defaultdict(list) #有序字典,按照插入顺序,py3中是遍历是默认按照插入顺序,py2不是 from collections import OrderedDict #字典的排序 prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75 } dic = sorted(prices, key=lambda x:prices[x]) print(dic) 这是普通的方法,从此也可看出,一般的操作,比如数学计算min(prices),都是针对keys,所以有的特殊数据可以翻转keys和values。 #查找两个字典的相同点 相同的键:a.keys() & b.keys() 多出不相同的键:a.keys() - b.keys() 键值都相同:a.items() & b.items() 过滤操作:c = {key:a[key] for key in a.keys-{'z','w'}}

 

转载请注明原文地址: https://www.6miu.com/read-2631925.html

最新回复(0)