Python高级特性
- 切片
- 迭代及迭代器
- 列表生成式
- 生成器
这些高级特性的作用都是一样的,为了代码的简洁、高效运行。
切片
切片让取一个list或tuple的部分元素变得相当简单,
e.g:
L=[‘jack’,’mike’,’jerry’]
那么第一个位置,索引为0:L[0]=’jack’;
索引从1-2,不包括2,L[1:2]=’mike’;
索引从倒数第二个到倒数第一个L[-2:-1]=’mike’;
间隔某个值取值:L[x:y:z],x表示起始位,y表示终止位,z表示间隔取值;
迭代
遍历List:
L = [‘mike’,’jack’,’jerry’]
for x in L:
print(‘Hello, %s!’ % x)
遍历dict:
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
迭代器:
凡是可作用于for循环的对象都是Iterable类型,isinstance()可以判断一个对象是否是Iterable对象,如:isinstance(‘abc’, Iterable);
凡是可作用于next()函数的对象都是Iterator类型;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象;
Python的for循环本质上就是通过不断调用next()函数实现的.
PS:迭代器的具体用法及好处在后面实际用到时再做补充。
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))
条件过滤:for循环结合if语句
e.g:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in [x for x in L1 if isinstance(x, str)]]
print(L2)
生成器
概念:如果你要创建一个超大容量的list,其实不需要创建完整的list,在Python中,提供了一边循环一边计算的机制,称为生成器:generator。
创建生成器:只要把一个列表生成式的[]改成(),就创建了一个generator:
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
然后通过for循环打印出来:
for n in g:
print(n)