python中有许多高级的特性,可以使我们减少很多代码量。
切片
切片可以实现列表、字符串等的截取
写法:
L=[1,2,3,4,5,6,7,8]
l[初始位置(为0可省略,可为负):终止位置(不包含次位置):间隔量(默认为1)]
>>> L
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[0:1]
[1]
>>> L[-1:0]
[]
>>> L[-1:]
[9]
>>> L[1:9:2]
[2, 4, 6, 8]
对于字符串也同样有效
迭代
可以用for…in循环来便利列表,元组,字典等的值
>>> for i in L:
... print(i)
...
1
2
3
4
5
6
7
8
9
字典默认遍历的是键,要遍历值,用.values()方法,要全部遍历,用.items()方法。
>>> d={'a':1,'b':2,'c':3}
>>> d
{'b': 2, 'c': 3, 'a': 1}
>>> for key in d:
... print(key)
...
b
c
a
>>> for value in d.values():
... print(value)
...
2
3
1
>>> for k,v in d.items():
... print(k,v)
...
b 2
c 3
a 1
通过collections模块的Iterable类型判断一个数据是否是可迭代型:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str
True
>>> isinstance([1,2,3], Iterable) # list
True
>>> isinstance(123, Iterable) # 整数
False
列表生成式
是Python内置的非常简单却强大的可以用来创建list的生成式。
语法
[生成元素格式 for循环(可多层和if判断)]
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
生成器
在Python中,这种一边循环一边计算的机制,称为生成器:generator。
最简单的方法是把生成式的[]改为()。
>>> l=(x * x for x in range(1, 11) if x % 2 == 0)
>>> l
<generator object <genexpr> at 0x7fb6ca32fca8>
>>> for i in l:
... print(i)
...
4
16
36
64
100
定义生成器的另一种方法:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个生成器:
生成斐波那契数列
>>> def fib(max):
... n, a, b = 0, 0, 1
... while n < max:
... yield b
... a, b = b, a + b
... n = n + 1
... return 'done'
...
>>> s=fib(10)
>>> for i in s:
... print(i)
...
1
1
2
3
5
8
13
21
34
55
迭代器
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
Python的for循环本质上就是通过不断调用next()函数实现的.