(1):将一个16进制的数转换成IP的形式。
利用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):利用setdefault与collections.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)求最大的n个数和最小的n个元素
如果你学过数据结构的话,那么堆排序一定是你知道的了。利用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']))))