迭代

我们用for循环把元素从容器里面取出来的过程叫做迭代

迭代是访问集合的一种方式,迭代器是一个可以记住遍历的位置的对象,迭代器对象从集合的第一个元素开始访问,知道所有元素被访问完结束,迭代器只能前进不能后退

list\tuple\str\dict\set等元素类型可以使用for...in...来取出里面的元素,这些称为可迭代对象。所有能够通过迭代来取出元素的都是可迭代对象

可以使用isinstance来判断是否可迭代

from collections import  Iterable
l = [1,2,3,4]

print(isinstance(l,Iterable))

可迭代对象内部都有__iter__方法

l = [1,2,3,4]

print(dir(l))

迭代器必须有iter和next方法

l = [1,2,3,4]
l_iter = l.__iter__()
print(dir(l_iter))
item = l_iter.__next__()
print(item)#输出1

可以用Iterable来判断是否是迭代器

from collections import  Iterator
l = [1,2,3,4]
l_iter = l.__iter__()
print(isinstance(l_iter,Iterator))

迭代是访问集合的一种方式,迭代器是一个可以记住遍历的位置的对象,迭代器对象从集合的第一个元素开始访问,知道所有元素被访问完结束,迭代器只能前进不能后退

list\tuple\str\dict\set等元素类型可以使用for...in...来取出里面的元素,这些称为可迭代对象。所有能够通过迭代来取出元素的都是可迭代对象

可以使用isinstance来判断是否可迭代

from collections import  Iterable
l = [1,2,3,4]

print(isinstance(l,Iterable))

可迭代对象内部都有__iter__方法

l = [1,2,3,4]

print(dir(l))

迭代器必须有iter和next方法

l = [1,2,3,4]
l_iter = l.__iter__()
print(dir(l_iter))
item = l_iter.__next__()
print(item)#输出1

可以用Iterable来判断是否是迭代器

from collections import  Iterator
l = [1,2,3,4]
l_iter = l.__iter__()
print(isinstance(l_iter,Iterator))

生成器

我们有时候想要获取函数的一些处理结果,但是如果用return,那么函数就结束了,如果用print,则可用性会变差,这里我们可以使用yield,生成器

def generator():
    a = 1
    print('给a赋值')
    yield a #k1
    b = 2
    print('给b赋值')
    yield b
g = generator() #生成器,不执行内部代码
print(g,next(g)) #触发运行,跑到k1停住
print(next(g)) #执行到b

# 给a赋值
# <generator object generator at 0x0000023AEB9F4BA0> 1
# 给b赋值
# 2
def generator():
    a = '米饭'
    for i in range(1000000):
        a = yield f'吃了第{i}个{a}陷的包子'#先执行yield返回,然后再执行a的赋值语句


pro = generator()
print(pro.__next__())
print(pro.send('三鲜肉'))#send=赋值+next
print(pro.send('粉丝'))
print(pro.send('咖喱牛肉'))
print(pro.send('雪菜'))
print(pro.send('牛肉'))

# 吃了第0个米饭陷的包子
# 吃了第1个三鲜肉陷的包子
# 吃了第2个粉丝陷的包子
# 吃了第3个咖喱牛肉陷的包子
# 吃了第4个雪菜陷的包子
# 吃了第5个牛肉陷的包子

# Process finished with exit code 0

列表推导式

a = [i for i in range(100)]

print(sum([i for i in range(1,101)]))

num = [i*i for i in range(100) if i % 3 is 0]

name = [['zhangsan','lisi','lixiuli','wangwu'],['tokugawa','ono','yochida','lilisu']]
print([namel for lst in name for namel in lst if 'li' in namel])#先取列表再取元素

name = ['zhangsan','lisi','lixiuli','wangwu','yochida']
print([namel for namel in name if 'li' in namel])

print('\n'.join('\t'.join([f'{i} x {j} = {i * j}' for i in range(1,j+1)])for j in range(1,10)))#99乘法表

把字母转小写并合并值

dic1 = {'a':1,'b':2,'y':1, 'A':4,'Y':9}
dict2 = {k.lower():dic1.get(k.lower(),0)+dic1.get(k.upper(),0) for k in dic1}
print(dict2)

字典推导式

k1 = {'a':1,'b':2,'c':3}
k2 = {k1[k]:k for k in k1}
print(k2)

标签: none

评论已关闭