python技巧(2):--python cookbook学习笔记

(1):16IP

利用zfill这个函数以及bin().
def convert(IP):
    bin_str = str.zfill(bin(int(IP,16))[2:],32)
    return '.'.join([str(int(bin_str[k*8:(k+1)*8],2)) for k in range(4)])

(2):setdefaultcollections.defaultdict

a.setdefault('key',[x])[0]+=1
b = defaultdict(list)
b['key'].append(x)#自动添加[],不需要担心初始化
这个函数的功能是设置key不存在时的默认值或者返回k对应的值,为了能够修改该值,我们可以将[]作为参数。

(3):输出一个对象的所有属性,__dict__.items()方法.

def g(x):
    print('\n'.join([ '{0}={1}'.format(k,repr(v))for k,v in x.__dict__.items()]) )

(4):

[0]*a表示a接受任意个位置参数并且组装成一个列表。很多时候可以给我们带来很多的方便。
[1]对于一个列表使用*表达式则代表将里面的元素取出来变成可变参数。

在你想取列表的一部分元素时,可以这样写:

a,*b,c = L

而不是

a,b,c = L[0],L[1:-1],L[-1]

这样就取得了中间的元素。获取的情况要根据L的长度来确定。

传入函数参数的时候,如果不确定参数的个数,就需要写成*args和**kargs的形式。

(5):deque使

python里面有两个模块含有deque,分别是collections和queue模块。其中后者是用来处理进程的。所以先介绍一下collecions.deque.它是一个双端队列,前后都可以添加或者释放元素。而且还可以设置一个maxsize,保证新加入的数据如果使得队列超过限制,就会把旧的数据挤出去。

from collections import deque
q = deque(maxlen = 5)
q.extend([1,2,3,4,5])
q.append(0)#挤出最左边的1
q.appendleft(0)#挤出最右边的0

(6)nn

如果你学过数据结构的话,那么堆排序一定是你知道的了。利用python里面的heapq模块,可以很简单的进行获取最大(小)N个元素的操作。同时还可以传入相应的key参数。
heapq.nlargest(3,[(1,'z'),(2,'w'),(3,'x'),(4,'f'),(5,'a')])
heapq.nlargest(3,[(1,'z'),(2,'w'),(3,'x'),(4,'f'),(5,'a')],key = lambda x:x[1])

(7)dict

利用collections模块的OrderedDict,这样就可以在输出的时候还保持原来的顺序。

d = OrderedDict()
d['foo'] = 1
d['fuck'] = 1
d['sort'] = 2
d.setdefault('key',[]).append(2)

(7)

如果我们想要对字典进行操作,那么很多函数都只能对key进行操作。所以如果要对values进行操作,我们可以直接对d.values(),但是如果我们同时要获取key的信息,那么就必须要重新作一次查找。简单的写法如下:

min(zip(a.values(),a.keys()))
sorted(zip(a.values(), a.keys()))
如果我们想要直接把这个新的list转换成为新的dict,我们可以这样.
new_dict = dict(sorted(zip(a.values(), a.keys())))

(8):

注意到字典返回的keys是一个set,所以可以进行一些交合并的操作。另外dict也可以使用列表表达式来进行。

a.keys()&b.keys()
c = {k:(a[k],b[k]) for k in a.keys()&b.keys()}#获得两个字典的交集.

(9) 去除序列里面的重复元素并且保持原来的顺序。下面的代码就利用生成器这个东西来进行消除,保存了一个seen和提供了key来进行hash。连字典作为元素都可以处理。

def unique(items,key=None):
    seen = set()
    for item in items:
        val = key(item) if key else item
        if val not in seen:
            seen.add(val)
            yield val
a = [{'x':2,'y':4},{'x':6,'y':7},{'x':6,'y':7}]
print(list(unique(a,lambda x:(x['x'],x['y']))))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值