#标题:通过列表解析构建列表#例1:比如让列表中每一个子项增加某一个数,如下:def myList(L): return ([x+20 for x in L])print myList([1,2,3,4,5,6,7,8])#例2:比如要查找列表中大于某个数的来构建成一个新列表,如下def myList(L): return ([x for x in L if x>5])print myList([1,2,3,4,5,6,7,8])#对例1和例2进行合并, 如下:def myList(L): return ([x+20 for x in L if x>5])print myList([1,2,3,4,5,6,7,8])#说明:当要考虑改变某个列表,而不是新建上列表时,列表解析是最好的方法,比如需要将某列表 L中大于100的设置成100,如下def myList1(L): L[:]=[min(x,100)for x in L] print LmyList1(list(range(90,102)))#注意:当执行一个循环时,不建议使用列表解析!#比如要复制一个列表,直接写成list(L)即可,还有当对每个元素进行调用一个函数是,使用map(f,L)#例3:对列表子项进行求和def myList(l): return sum([x+20for x in l if x>5])print myList(range(20))#或者写成如下,不用括号def myList(l): return sum(x+20for x in l if x>5)print myList(range(20))#这样做的原因是可以一次性将整个列表载入到内存 #给字典增加一个条目#标题:给定一个字典d,当k是字典的键,直接使用d[k],若k不是d键时,则创建这个新条目,如下def addWork(index,word,page): index.setdefault(word,[]).append(page)
#反转字典#给定一个字典,此字典将不同的键映射到不同的值,而你想创建一个反转的字典,将各个值反映到键#通过dict列表解析式解决这个问题def invert_dict(d): return dict([(v,k)for k,v in d.iteritems()]) print invert_dict({1:2,‘a‘:4})#对于比较大的字典,可以使用itertools模块的izip()from itertools import izipdef invert_dict(d): return dict(izip(d.iteritems(),d.iterkeys()))print invert_dict({1:2,‘a‘:4})"""如果字典d中的值不中独一无二的,那么d无法被真正的反转,也就是不存在这样的字典,对于任意给定的键k,满足id[d[k]]==k,不过对于任意属于字典d值v,d[pd[v]]=v,如果给定你原始的字典d,就可以很检查出x是d反转字典还是伪反转字典:当且仅当len(x)==len(d)时,x才是d真正的反转字典因为如果2个不同的键对应相同的值,对于解决方案给出的2个函数来说,2个键中的一个一定会消失因而生成的伪反转字典长度也会比原字典长度短,在任意情况下,只有当d中的值是可哈希的,那么前面的函数就能正常工作,否则函数将给出一个typeerror异常这个函数取得了iteritems方法生成成对键及其他对应值k和v,将它们包裹成(v,k)顺序并把最后生成序列作为参数赋给dict,这样dict就构建出一个值的键,而原先的键变成对应值的新字典,"""
时间: 2024-10-10 01:05:41