学习资料来自于ring翻译的python cook book.源贴于linuxforum ,此处只是记录我自己的一点理解

有效处理选择结构数据对

处理有配对的大数据集。

方法:使用一个辅助的字典作数据预处理
可以把O(M*N) 变成 O(M+N)

例子:有两个日志 weblog (网站日志) clog (信用卡支付日志) 其中ipaddress为配对条件

weblog=[[‘202.11.23.43’,’/main’,’2005-1-1
1:23
’,23] ……….]

clog=[[‘202.11.23.43’,30,’2005-2-3
12:23’,’Visa’]
……. ]

O(M*N)解决方法

result=[process(webhit,ccinfo)
for webhit in weblog for ccinfo in clog

 if 
webhit[0]==ccinfo[0]]

O(M+N)

ipdict={}

for webhit in
weblog:

   
ipdict.setdefault(webhit[0],[]).append(webhit)

#ipdict {‘202.11.23.43’:[[ ‘202.11.23.43’,’/main’,’2005-1-1
1:23
’,23],[….]],…}

result=[precess(webhit,ccinfo)
for ccinfo in clog for webhit in ipdict[ccinfo[0]]]

 

 

保持稳定性同时排序

由于Python中排序的不确定性,有时需要对值相同的记录在排序后保持排序前的顺序。

通过建立建立索引来保证排序后的顺序

def
stable_sort(alist, indices=xrange(sys.maxint)):

    temp=zip(alist,indices)

    temp.sort()

    alist[:]=[item for item,index in temp]

 

通过多个条件来排序List

方法1

通过传递一个比较函数至sort内,该种方法速度较慢,适合较小的list

import stirng

star_list=[‘Elizabeth
Taylor’, ‘Bette Davis’, ‘Hugh Grant’, ‘C. Grant’]

star_list.sort(lambda
x,y : (cmp(string.split(x)[-1], string.split(y)[-1]) or cmp(x,y)))

#sort by lastname then by first name

 

方法2

def
sorting_criterion_1(data):

    return string.split(data)[-1]  #last name

 

def
sorting_criterion_2(data)

    return len(data)  #增加一个长度条件

 

#打包

aux_list=map(lambda
x:(sorting_criterion_1(x),

                    sorting_criterion_2(x),

                    x),

                    star_list)

aux_list.sort()

#解包

star_list=[star[-1]
for star in aux_list]

 

字母反序排序

import string

all_characters =
string.maketrans(”,”)  
字母表字符串

all_characters_list =
list(all_characters)

all_characters_list.reverse( )

rev_characters =
”.join(all_characters_list)

rev_trans =
string.maketrans(all_characters, rev_characters)  

 

# Pack a better-ordered and corrected
auxiliary list:

aux_list = map(lambda x:
(string.translate(sorting_criterion_1(x), rev_trans),

sorting_criterion_2(x),

x),

star_list)

 

aux_list.sort( )

 

# Unpack the resulting list:

star_list = map(lambda x: x[-1],
aux_list)

 

 

 


评论

该日志第一篇评论

发表评论

评论也有版权!