这是菜鸟学Python的第119篇原创文章
阅读本文大概需要3分钟
前面我写过一篇文章谈了自己的Python学习经验(我学Python的经验),里面谈到"技巧宛如一颗一颗珍珠",后台有好几个小伙伴留言,能不能分享一些技巧. 其实我的里面多多少少分享过一些,今天我分享一些自己私藏的非常不错的技巧和代码给大家,希望对大家有用!
1.一行代码,巧妙求解
列出1到20的数字,若是3的倍数就用apple代替,若是5的倍数就用orange代替,若既是3的倍数又是5的倍数就用appleorange代替
<span style="color:#66d9ef;font-style:italic;">print </span>[<span style="color:#a5c261;">'apple'</span>[i<span style="color:#f92672;">%</span><span style="color:#ae81ff;">3</span><span style="color:#f92672;">*</span><span style="color:#ae81ff;">5</span><span style="color:#f92672;">::</span>]<span style="color:#f92672;">+</span><span style="color:#a5c261;">'orange'</span>[i<span style="color:#f92672;">%</span><span style="color:#ae81ff;">5</span><span style="color:#f92672;">*</span><span style="color:#ae81ff;">6</span><span style="color:#f92672;">::</span>] <span style="color:#66d9ef;font-style:italic;">or </span>i <span style="color:#66d9ef;font-style:italic;">for </span>i <span style="color:#66d9ef;font-style:italic;">in </span><span style="color:#66d9ef;">range</span>(<span style="color:#ae81ff;">1</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">21</span>)]
点评:字符串的处理我自认为掌握的非常熟练了,各种奇淫技巧都已经烂熟于心,但是当我看到上面这个解法的时候,彻底跪了太巧妙了.
2.推导列表生成字典
推导列表我相信大家都用过,但是推导列表还能生成字典,非常简洁.
点评:字典的生成相信每个人都会,但是用推导列表生成字典并不是时刻都会想到的.
3.漂亮的zip生成
<span style="color:#66d9ef;font-style:italic;">print </span><span style="color:#66d9ef;">dict</span>(<span style="color:#66d9ef;">zip</span>(<span style="color:#a5c261;">'abcd'</span><span style="color:#cc7832;">,</span><span style="color:#66d9ef;">range</span>(<span style="color:#ae81ff;">4</span>))) <br /><span style="color:#f92672;">>></span>{<span style="color:#a5c261;">'a'</span><span style="color:#f92672;">: </span><span style="color:#ae81ff;">0</span><span style="color:#cc7832;">, </span><span style="color:#a5c261;">'c'</span><span style="color:#f92672;">: </span><span style="color:#ae81ff;">2</span><span style="color:#cc7832;">, </span><span style="color:#a5c261;">'b'</span><span style="color:#f92672;">: </span><span style="color:#ae81ff;">1</span><span style="color:#cc7832;">, </span><span style="color:#a5c261;">'d'</span><span style="color:#f92672;">: </span><span style="color:#ae81ff;">3</span>}<br />
<span style="background-color:#472c47;">chinese</span><span style="color:#f92672;">=</span>[<span style="color:#ae81ff;">90</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">70</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">96</span>]<br />eng<span style="color:#f92672;">=</span>[<span style="color:#ae81ff;">80</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">78</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">90</span>]<br />math<span style="color:#f92672;">=</span>[<span style="color:#ae81ff;">96</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">84</span><span style="color:#cc7832;">,</span><span style="color:#ae81ff;">80</span>]<br />total<span style="color:#f92672;">=</span>[]<br /><span style="color:#66d9ef;font-style:italic;">for </span>c<span style="color:#cc7832;">,</span>m<span style="color:#cc7832;">,</span>e <span style="color:#66d9ef;font-style:italic;">in </span><span style="color:#66d9ef;">zip</span>(<span style="background-color:#3c3c57;">chinese</span><span style="color:#cc7832;">,</span>eng<span style="color:#cc7832;">,</span>math)<span style="color:#f92672;">:<br /> </span>total.append(c<span style="color:#f92672;">+</span>m<span style="color:#f92672;">+</span>e)<br /><br /><span style="color:#66d9ef;font-style:italic;">print </span>total<br /><span style="color:#f92672;">>></span>[<span style="color:#ae81ff;">266</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">232</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">266</span>]
点评:zip是一个非常重要的函数,非常方便.熟悉掌握zip帮我大幅的减少函数的代码和复杂度,并且提高效率,zip是我最喜欢的函数之一!
4.if val is not None
为啥会这样写呢,为啥不能写成 if val ,不知道大家有没有思考过这样问题.
其实这两者是有区别的:比如val 可能为'',0,None,[],{}
如果写成if val 会把'',0,[],{}这样的情况也包含在里面,有的时候我们其实只想过滤掉不为None的情况
点评:平时学会推敲很重要,为啥有的代码要这样写,有的要那样写,比如==和is的区别。
5.list分组
有的时候我们希望对一个list进行分组,有什么好的办法呢
<span style="background-color:#472c47;">a</span><span style="color:#f92672;">=</span>[<span style="color:#ae81ff;">3</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">8</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">9</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">4</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">1</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">10</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">6</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">7</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">2</span>]<br /><span style="color:#66d9ef;font-style:italic;">print </span>[<span style="background-color:#3c3c57;">a</span>[i<span style="color:#f92672;">:</span>i<span style="color:#f92672;">+</span><span style="color:#ae81ff;">3</span>] <span style="color:#66d9ef;font-style:italic;">for </span>i <span style="color:#66d9ef;font-style:italic;">in </span><span style="color:#66d9ef;">xrange</span>(<span style="color:#ae81ff;">0</span><span style="color:#cc7832;">,</span><span style="color:#66d9ef;">len</span>(<span style="background-color:#3c3c57;">a</span>)<span style="color:#cc7832;">,</span><span style="color:#ae81ff;">3</span>)]<br /><span style="color:#f92672;">>></span>[[<span style="color:#ae81ff;">3</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">8</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">9</span>]<span style="color:#cc7832;">, </span>[<span style="color:#ae81ff;">4</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">1</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">10</span>]<span style="color:#cc7832;">, </span>[<span style="color:#ae81ff;">6</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">7</span><span style="color:#cc7832;">, </span><span style="color:#ae81ff;">2</span>]]
点评:通过一个推导列表和切片的完美组合,就可以轻松化解.
6.递归的好例子
比如有一个嵌套的列表,里面嵌套了很多层,有列表有元组,层层嵌套,如何把它转换成只有一层的列表,必须要用递归也能解决
点评:递归觉得是一个好东西,虽然理解起来很复杂,但是可以用很少的代码解决很多复杂的问题.
7.查询列表里面的某一个值
有的时候,我们需要从比如一个很长的列表里面,找到某一个或者某一类的元素,怎么办? 很简单用高级函数filter()
点评:Python里的高阶函数一直是我的最爱,像map,zip,filter应该要熟练掌握.
8.一个不错的namedtuple class
namedtuple是collections模块里面的一个非常有用的函数,类似一个小的迷你类,但是省去了类的一些复杂结构,可以像访问类的变量一样去访问,非常酷.
下面这个例子是关于描述52张扑克牌的代码,目前为止是我见到过最巧妙的数据结构,设计非常精秒,值得一读.
点评:非常巧妙的利用了namedtuple,大幅的减少了代码的复杂度,简洁的同时又不降低代码的质量,这段代码我足足看了5遍,非常酷!里面还重构的了一些类的内置函数,另有妙用,大家可以自己体会一下.
9.非常漂亮的取列表,字典里面的排序
点评:利用heapq函数可以非常方便的对单列表,单字典进行排序,而对于复杂的字典组合列表,排序取值也很方便,其实用sorted也可以,二者有异曲同工之妙.
结论:
其实Python的技巧非常非常多,大家平时的写代码或者读代码的时候要注意收集,特别是有一些精妙的招数,一时半会无法领悟,可以记下来,慢慢思考,总有一天会对你的功力增长大有裨益.
另外有连续4天没有更新文章,守破离的心态看一些产品的书和打磨一个小的产品 ,其实做产品才是我的最爱.好了又要继续前行了,还有很多有趣好玩的文章要分享,大家尽情期待吧.
马上月底了,小密圈又要开始发红包啦
两件事|小密圈送红包了
小密圈一周都干了啥
我开通小密圈了|寻找100位忠实粉丝
长按二维码,加入小密圈
来源 | 菜鸟学Python
作者 | xinxin
本文章为菜鸟学Python独家原创稿件,未经授权不得转载
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何理解 Python 的作用域?11/18
- ♥ 如何在python中逐行读取文件内容08/20
- ♥ python如何输出变量的值?09/04
- ♥ python如何合并多个excel单元格?12/02
- ♥ Python实现排序算法的可视化10/14
- ♥ 如何在python中安装pil12/17
内容反馈