Python的魅力(Pythonic)及各种“不为人知”的小技巧
2014-07-08 09:45
417 查看
写这篇Blog的目的是记录学习Pythonic中遇到某些提问缩,以及回答某些提问,力图做到Pythonic!!!【如果您认为有更简洁的代码,更一目了然的代码,更Pythonic的代码,一定记得交流探讨下。谢谢,也不枉我的抛砖引玉。3Q】
1、Python: Built-in Functions妙用
一个小例子,出自于某某XX问的作业题:
我的答案如下:
【更新于2014.07.23:实测使用key更快!】
我们用sorted()和.sort()函数了来测试一个简短小程序
3、循环中动态产生变量
出自于QQ群某学生提问【2014.07.23】
一直在学习,so更新不断。
本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。还有未涉及的,会不定期更新,有错误请指正。
如果你看到这篇博文时发现不完整,那是我为防止爬虫先发布一半的原因,请看原作者Blog。
如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。
1、Python: Built-in Functions妙用
一个小例子,出自于某某XX问的作业题:请问,这个题目怎么做? a=[[1,2], [3,4], [5,6], [7,8], [9,0]] b=[8,7,9,7,9] 其中, b[0]=8 对应着 a[0]=[1,2] b[1]=7 对应着 a[0]=[3,4] b[2]=9 对应着 a[0]=[5,6] b[3]=7 对应着 a[0]=[7,8] b[4]=9 对应着 a[0]=[9,0] 把 b 从小到大排序,变成b=[7,7,8,9,9],现在希望原来的b的成员与a的成员之间的对应关系能够保留,也就是同时把a变成 a=[[3,4], [7,8], [1,2], [5,6], [9,0]] ,或者 a=[[7,8], [3,4], [1,2], [5,6], [9,0]] ,或者 a=[[3,4], [7,8], [1,2], [9,0], [5,6]] ,或者 a=[[7,8], [3,4], [1,2], [9,0], [5,6]], 这四个解答里面任何一个都可以。 请问,用最简洁的python语句怎样编写这个小程序???
我的答案如下:
>>> a = [[1,2], [3,4], [5,6], [7,8], [9,0]] >>> b = [8,7,9,7,9] >>> c = zip(b,a) >>> c [(8, [1, 2]), (7, [3, 4]), (9, [5, 6]), (7, [7, 8]), (9, [9, 0])] >>> d = sorted(c, cmp=lambda x,y:cmp(x[0],y[0])) >>> d [(7, [3, 4]), (7, [7, 8]), (8, [1, 2]), (9, [5, 6]), (9, [9, 0])] >>> print [i[1] for i in d] [[3, 4], [7, 8], [1, 2], [5, 6], [9, 0]] >>>
【更新于2014.07.23:实测使用key更快!】
2、测试运行时间和内部执行
使用timeit模块查看运行时间以及使用dis模块查看字节码我们用sorted()和.sort()函数了来测试一个简短小程序
>>> a = [4, 2, 1, 5 , 3] >>> import timeit >>> A = lambda: sorted(a) >>> B = lambda: a.sort() >>> # 想想以下为什么这样的顺序执行 >>> timeit.Timer(A).timeit() 0.407991886138916 >>> timeit.Timer(B).timeit() 0.18276619911193848 >>> a [1, 2, 3, 4, 5] >>> a = [4, 2, 1, 5 , 3] >>> a [4, 2, 1, 5, 3] >>> import dis >>> dis.dis(A) 1 0 LOAD_GLOBAL 0 (sorted) 3 LOAD_GLOBAL 1 (a) 6 CALL_FUNCTION 1 9 RETURN_VALUE >>> dis.dis(B) 1 0 LOAD_GLOBAL 0 (a) 3 LOAD_ATTR 1 (sort) 6 CALL_FUNCTION 0 9 RETURN_VALUE >>>这段代码测试表明:如果不需求特殊的排序方式或者不需要返回一个全新的序列,那么 .sort()性能更优(实际上是废话,一个操作原始数据,一个还要复制一份)。所以,需要优化时候,测试吧!例如直接赋值
a, b = b, a
3、循环中动态产生变量
出自于QQ群某学生提问【2014.07.23】
>>> for i in xrange(5): exec 'a'+str(i)+' = '+str(i)+'' >>> a0 0 >>> a1 1 >>> a2 2
一直在学习,so更新不断。
本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。还有未涉及的,会不定期更新,有错误请指正。
如果你看到这篇博文时发现不完整,那是我为防止爬虫先发布一半的原因,请看原作者Blog。
如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。
相关文章推荐
- 不为人知的python request小技巧
- python小技巧,各种进制的转换
- Python的各种小技巧
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- 各种数据库总结与页面传值及小技巧等杂汇
- 收集Python 各种方面的技巧片段
- 卸载各种顽固程序时的6个秘密小技巧
- 一个不为人知道的QQ小技巧
- 第5 部分— 各种小技巧
- python中的汉字编码问题,兼及Qt,兼及各种编码 unicode, utf8,gbk,gb2312,gb18030.....
- python 宝典 笔记 第十二章 存储数据和对象 (各种对象转换成字符串)
- Python模块之chardir: 使用chartdir生成各种图表
- Python少打字小技巧
- 调试用flex连接python后台的小技巧(原创)
- FORCAL与C/C++、MATLAB、Python、Lua等各种语言的速度比较
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- JavaScript常用小技巧—各种屏蔽功能
- JavaScript常用小技巧—各种屏蔽功能
- 由Python想起的各种进制数
- 转载《Linux Shell Bash 各种小技巧》