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

邏輯圖

第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基礎小白的路上前進。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章