python cookbook第二版_#python cookbook第2版学习(都记录在此)

标签:#标题:通过列表解析构建列表

#例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 L

myList1(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 izip

def 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就构建出一个值的键,而原先的键变成对应值的新字典,

"""

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值