Python高级特性
1. 切片
列表,元组,字符串都可切片操作
list[:3]前三个
list[::2]隔2个取一个
list[:10:2]前十个隔2个取一个
list[-2:]从倒数第二个取到最后
list[-5:-1]倒数第五个取到最后
2. 迭代
for循环
列表,元组,字典,字符串都可迭代
for i in list/tuple/str:
for key in dict: 这个是打印出key值
for value in dict.values():这个是打印values值
for k, v in dict.items():
for i, value in enumerate(['A', 'B', 'C']): print(i, value)
enumerate是打印出下标和元素
3. 列表生成
a = list(range(1,10)) b = [x * x for x in range(1,10)]
d = {'x': 'A', 'y': 'B', 'z': 'C' } b = [k + '=' + v for k, v in d.items()] print(b) L = ['Hello', 'World', 'IBM', 'Apple'] b = [s.lower() for s in L] print(b)
和if else的连用
a = [x * x for x in range(1, 12) if x % 2 == 0] print(a) b = [x * x if x % 2 == 0 else 0 for x in range(1, 12)] print(b)
如果前面是for循环,则不用else;如果带了else,起不到filter作用;此处的if相当于过滤条件
如果后面是循环,用else;此处的if相当于表达式
3.1 生成器
把列表生成中的[]换成()。优势是动态生成,节省内存
g = (i * i for i in range(1,12) if i % 2 == 0)
print(next(g)) for n in g: print(n)
生成器通过next(g)生成,不过一般都是循环打印
3.2 yield
函数中加yield就是生成器
def feb(num): i, a, b = 0, 0, 1 while i < num: #print(b) yield b a, b = b, a + b#先计算等号右边[a, a+b]=[0,1] i = i + 1 a = feb(5) next(a)
遇到yield时返回,调用时只能通过next() 函数
4. 迭代器
直接作用于for循环的容器,都是迭代器,如列表,元组,字典,集合,字符串,生成器,带yield的函数