python Cookbook 学习笔记(一)


前言

这是python bookcook书籍的学习总结笔记

一、 数据结构和算法

1.获取可迭代对象部分元素

任何序列可通过赋值分解变量,用 * 可以分解多余的值,_表示丢弃值元素,()用来获取可迭代对象内层元素
示例:

list1=[1,2,3,[4,5],6]
start,*_=list1#start=1,*_为2,3,[4,5],6
start1,*_,[*_,l2],end=list1#l2为5

用处讨论

获得可迭代对象中所需要的一部分,它也可以与某些特定的字符串处理等生成序列的操作相结合

lines='www.baidu.com'
h,n,e=lines.split('.')
#www baidu com

2. 保存最后N个元素常利用depue队列特性:先进先出

import collections
q=collections.deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)#deque([1, 2, 3], maxlen=3)
q.append(4)#deque([2, 3, 4], maxlen=3)

补充:depue可以在两端执行添加和弹出操作,appendleft、popleft

3. 找到最大或最小的N个元素

利用heapq模块中的nlargest(n, iterable, key=None)和nsmallest(n, iterable, key=None)函数

from heapq import nlargest,nsmallest

store=[
    {
   'name':'apple','price':123},
    {
   'name': 'AVI', 'price': 1234},
    {
   'name': 'Cos', 'price': 1233},
    {
   'name': 'apples', 'price': 1213},
]
cheap=nsmallest(2,store,key=lambda s:s['price'])#[{'name': 'apple', 'price': 123}, {'name': 'apples', 'price': 1213}]

补充:N=1不如选min\max

4. 创建一键多值的字典

利用collections模块的defaultdict(type)

from collections import defaultdict
d=defaultdict(list)#选择容器类型为列表,为键添加值时,可以调用对应的方法
d['key1'].append('values1')
d['key1'].append('values2')#defaultdict(<class 'list'>, {'key1': ['values1', 'values2']})
print(d)

5. 让字典保持有序

问题描述:当我们学习字典时,就明白字典的key是无序的。但当我们对字典做迭代或序列化操作时,希望能控制其中元素的顺序。
利用collections模块中的OrderdDict类

import json
from collections import OrderedDict
d=OrderedDict()
d['key1']='v1'
d['key2']='v2'#OrderedDict([('key1', 'v1'), ('key2', 'v2')])
d=json.dumps(d)#{"key1": "v1", "key2": "v2", "key3": "v3", "key4": "v4"}

讨论:OrderdDict的大小是普通相同字典的两倍多,需要认真考虑OrderdDict带来的好处是否真的能替补它的缺点
补充:默认情况下Python的字典输出顺序是按照键的创建顺序。字典的无序是指,不能人为重新排序。比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。而且这个输出顺序是也不是能真正按照创建顺序可以控的。这里面有两个影响因素:(1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。(2)字典空间扩容,当键的数量超过字典默认开的空间时,字典会做空间扩容,扩容后的键顺和创建顺序就会发生变化,不受人为控制。

6. 对字典的值进行计算

问题描述:我们经常需要在字段上进行如最小值、排序等计算操作
解决:利用zip将字典与数据进行反转,在进行其他计算操作。

from heapq import n
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值