1.一行代码,巧妙求解
列出1到20的数字,若是3的倍数就用apple代替,若是5的倍数就用orange代替,若既是3的倍数又是5的倍数就用appleorange代替
print ['apple'[i%35::]+'orange'[i%56::] or i for i in range(1,21)]
点评:字符串的处理我自认为掌握的非常熟练了,各种技巧都已经烂熟于心,但是当我看到上面这个解法的时候,彻底跪了太巧妙了.
2.推导列表生成字典
推导列表我相信大家都用过,但是推导列表还能生成字典,非常简洁.
字典的生成相信每个人都会,但是用推导列表生成字典并不是时刻都会想到的.
3.漂亮的zip生成
zip是一个非常重要的函数,非常方便.熟悉掌握zip帮我大幅的减少函数的代码和复杂度,并且提高效率。
print dict(zip('abcd',range(4))) {'a': 0, 'c': 2, 'b': 1, 'd': 3} chinese=[90,70,96] eng=[80,78,90] math=[96,84,80] total=[] for c,m,e in zip(chinese,eng,math): total.append(c+m+e) print total [266, 232, 266]
4.if val is not None
为啥会这样写呢,为啥不能写成 if val ,不知道大家有没有思考过这样问题.
其实这两者是有区别的:比如val 可能为'',0,None,[],{}
如果写成if val 会把'',0,[],{}这样的情况也包含在里面,有的时候我们其实只想过滤掉不为None的情况
5.list分组
有的时候我们希望对一个list进行分组,有什么好的办法呢
通过一个推导列表和切片的完美组合,就可以轻松化解.
a=[3, 8, 9, 4, 1, 10, 6, 7, 2] print [a[i:i+3] for i in xrange(0,len(a),3)] [[3, 8, 9], [4, 1, 10], [6, 7, 2]]
6.递归的好例子
比如有一个嵌套的列表,里面嵌套了很多层,有列表有元组,层层嵌套,如何把它转换成只有一层的列表,必须要用递归也能解决
7.一个不错的namedtuple class
namedtuple是collections模块里面的一个非常有用的函数,类似一个小的迷你类,但是省去了类的一些复杂结构,可以像访问类的变量一样去访问,非常酷.
结论:
其实Python的技巧非常非常多,大家平时的写代码或者读代码的时候要注意收集,特别是有一些精妙的招数,一时半会无法领悟,可以记下来,慢慢思考,总有一天会对你的功力增长大有裨益。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试