一、高级特性
1.切片
取前3个元素用L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。如果第一个索引是0可省略。前10个数 每两个取一个L[:10:2],所有数 每5个取一个L[::5],原样复制[:]
Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
2.迭代
在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的。
如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断
>>> from collections import Iterable
>>> isinstance(‘abc‘, Iterable) # str是否可迭代
True
如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
>>> for i, value in enumerate([‘A‘, ‘B‘, ‘C‘]):
... print i, value
3.列表生成式
要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11)
要生成[1x1, 2x2, 3x3, ..., 10x10]可以用[x * x for x in range(1, 11)]
筛选出仅偶数的平方 [x * x for x in range(1, 11) if x % 2 == 0]
使用两层循环,可以生成全排列>>> [m + n for m in ‘ABC‘ for n in ‘XYZ‘] 结果: [‘AX‘, ‘AY‘, ‘AZ‘, ‘BX‘, ‘BY‘, ‘BZ‘, ‘CX‘, ‘CY‘, ‘CZ‘]
for循环其实可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value>>> d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ } >>> for k, v in d.iteritems(): ... print k, ‘=‘, v
内建的isinstance函数可以判断一个变量是不是字符串>>> isinstance(x, str)
L= [s.lower() if isinstance(s,str) else s for s in L]是condition expression
L= [s.lower() for s in L if isinstance(s,str) else s for s in L]是list comprehension
else 语法不是list comprehension中的,想要用else的话需要用condition expressions。