python 高级特性
来源:互联网 发布:双色球参选数据诈骗 编辑:程序博客网 时间:2024/06/05 09:44
1、切片:Slice [ 始 : 终 : 间隔 ]
比如,一个list如下:
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
取前3个元素,应该怎么做?>>> L[0:3]['Michael', 'Sarah', 'Tracy']
L[0:3]
表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
如果第一个索引是0,还可以省略:
>>> L[:3]['Michael', 'Sarah', 'Tracy']
也可以从索引1开始,取出2个元素出来:
>>> L[1:3]['Sarah', 'Tracy']
类似的,既然Python支持L[-1]
取倒数第一个元素,那么它同样支持倒数切片,试试:
>>> L[-2:]['Bob', 'Jack']>>> L[-2:-1]['Bob']
记住倒数第一个元素的索引是-1
。
前10个数,每两个取一个:
>>> L[:10:2][0, 2, 4, 6, 8]
for ... in
来完成的如迭代dict
>>> d = {'a': 1, 'b': 2, 'c': 3}>>> for key in d:... print key...acb
因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues()
,如果要同时迭代key和value,可以用for k, v in d.iteritems()
。
那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:
>>> from collections import Iterable>>> isinstance('abc', Iterable) # str是否可迭代True>>> isinstance([1,2,3], Iterable) # list是否可迭代True>>> isinstance(123, Iterable) # 整数是否可迭代False
如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate
函数可以把一个list变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身:
>>> for i, value in enumerate(['A', 'B', 'C']):... print i, value...0 A1 B2 C
写列表生成式时,把要生成的元素x * x
放到前面,后面跟for
循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0][4, 16, 36, 64, 100]
还可以使用两层循环,可以生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ']['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:
>>> import os # 导入os模块,模块的概念后面讲到>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']
使用内建的isinstance
函数可以判断一个变量是不是字符串:
>>> x = 'abc'>>> y = 123>>> isinstance(x, str)True>>> isinstance(y, str)False
4、生成器Generator ( )
(1) 使用()
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]
改成()
,就创建了一个generator:
>>> L = [x * x for x in range(10)]>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x104feab40>
创建L
和g
的区别仅在于最外层的[]
和()
,L
是一个list,而g
是一个generator。
我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?
如果要一个一个打印出来,可以通过generator的next()
方法:
>>> g.next()0>>> g.next()1
next()
,就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。但是,我们创建了一个generator之后一般不会调用next(),而是使用for循环。
>>> g = (x * x for x in range(10))>>> for n in g:... print n...
(2)使用函数来实现generator- Python高级特性
- Python的高级特性
- Python高级特性
- Python高级特性
- python高级特性
- Python高级特性:生成器
- python 高级特性
- Python学习----高级特性
- Python 高级特性 : 切片
- Python 高级特性 : 生成器
- python 高级特性
- Python高级特性
- Python-Day3(高级特性)
- python的高级特性
- python高级特性 - 切片
- Python高级特性
- python 2.7 : 高级特性
- python 高级特性
- 润乾报表统计图模态窗口传递单元格值
- HDU1532Drainage Ditches(网络流Ford-Fulkerson模板)
- iOS--打开第三方应用
- Arduino使用ESP8266通信的实践
- ioremap映射的问题
- python 高级特性
- hadoop中MapReduce多种join实现实例分析
- CSS3实战开发:手把手教大家折角效果实战开发
- Island Perimeter
- Java中的I/O流及利用I/O流实现文件复制功能
- SET NEWNAME FOR DATABASE TO恢复数据库
- [读书笔记]30 天自制操作系统 day2 汇编语言学习与Makefile入门
- 初入MVP框架
- 如何关闭html页面上的iframe页面