Python内置数据结构

#参考自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'}}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值