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的函数

 

posted @ 2021-12-25 22:13  Iving  阅读(29)  评论(0编辑  收藏  举报