列表推导式、迭代器、生成器

逻辑图

第8天的逻辑图

列表推导式

列表推导式的形式有点像三目式,但是跟三目式不一样,这里复习一下三目式

复习三目式

a=1
b=2
if a>b:
	print(a+b)
else:
	print(a-b)
#写成三目式为
print([a+b if a>b else a-b])

讲解

下面用一个例子来阐释列表推导式。
在Python当中,应该如何生成[0.5,1,1.5,…,9.5,10]的列表呢?

'''
不用列表推导式的话需要两步
1.首先要生成0.5,1,,1.5……的数
2.将这些数放进一个列表当中
'''
li = []
for i in range(1,21):
	i = i/2
	li.appand(i)
print(li)
# 使用列表推导式
li = [i/2 for i in range(1,21)]

使用列表推导式可以将代码由4行简写为1行,使代码看起来更加简洁。会了列表推导式,我们继续举几个小例子,实战一下。

实例

列表推导式

i = [i**2 for i in range(-3,4) if i>0]
print(li)

列表推导式的嵌套

for i in "abc":
	for j in "123":
		print(a+b)
# 列表推导式为
print([a+b for i in "abc" for j in "123"])

扩展(字典推导式)

既然有列表推导式,那么就会有字典推导式。
例子:li =[“name”,“age”,“gender”],如何实现dic = {1:“name”,2:“age”,3:“gender”}

li = ["name","age","gender"]
dic2 = {li.index(i):i for i in li}

迭代器

何为迭代?:通过for循环遍历每个列表的过程。
那么for循环的工作原理是怎么样的呢?
1.调用了__iter__方法 将数据对象转为迭代器
2.迭代器调用了__next__方法读取数据

我们应该如何判断这个对象是否是可迭代的呢?可以通过isinstance()这个函数来查看

from collections import Iterable,Iterator
print(isinstance('abc',Iterable))
print(isinstance('abd',(Iterable,str)))
print(isinstance(123,Iterable))
print(isinstance({1,2,3,4},Iterable))

这里要值得注意的是,迭代器不支持索引来取其中的元素,只能够通过for循环遍历,或者是next()函数一个一个的来取。

li = [1,2,3,4]
# print(isinstance(li,Iterator))
lis = iter(li)
print(isinstance(lis,Iterator))
# 迭代器不支持索引取元素
print(lis.__next__())
print(lis.__next__())
print(lis.__next__())
# 从上至下,一个一个取。
print(next(lis))
print(next(lis))

那迭代器的作用是什么呢?其实就是为了节约空间,虽然身为小白的我们应该也不要考虑这个问题,但是当你们成为大佬的一天,肯定会涉及到这个问题。加油!

生成器

一边循环一边计算的机制,称为生成器(Generator)。
生成器的怎么来定义呢?最简单的方式当然是用()括起来,这可不是元组哦。另外一种方式就是yield,请看代码:

gen = (i for i in range(20))
print(gen)

# 利用生成器来自定义列表的长度
def test(number):
    n = 0
    # li = []
    while n < number:
        # li.append(n)
        yield n
        n += 1

res = test(20000)
print(res) 
'''
1.遇到yield(生成器),函数会暂停,将对象返回,下次会继续上次暂停的地方
执行
2.return直接返回,不会暂停'''

只要我们看到yield就要想到生成器。它的作用当然也是等你们和我都成为资深小白了才会用到,目前像我这种宛若智障的小白当然是不会用到的。

总结

今天的笔记就写到这里了,目前接触的都是以前自己学习不会学到的内容,但是还是在基础部分,可想而知以前的自己是多么的浅薄无知,也理解了编程文化的博大精深,加油,向0基础小白的路上前进。

发布了8 篇原创文章 · 获赞 9 · 访问量 78

猜你喜欢

转载自blog.csdn.net/weixin_45814193/article/details/103378598