用yield關鍵詞實現列表的分組

2021-10-03 11:22:34 字數 1163 閱讀 1276

我們可以使用yield函式來方便的將乙個列表分割成n分,寫成divide_iter(lst, n)的介面形式。我們這裡注意到yield會把返回值依次儲存到生成器generator中,並且把while迴圈走完。

要注意的是,這裡我們還需要重新掌握以下知識點:

1.列表的切片操作 lst[i*div:(i-1)*div]

2.cel函式獲得小數的進製

3.len獲得list的長度

from math import ceil

def divide_iter

(lst, n)

:if n<=0:

yield lst

return

i,div =0,

ceil

(len

(lst)

/ n)

while iyield lst[i*div :

(i+1

)*div]

i +=1

print

(i)gen =

divide_iter([

1,2,

3,4,

5],0

)print

(gen)

print

(list

(gen)

)gen =

divide_iter([

1,2,

3,4,

5],2

)print

(list

(gen)

)

輸出結果如下:

>[[

1,2,

3,4,

5]]1

2[[1

,2,3

],[4

,5]]

[finished in

1.2s]

如果我們使用for迴圈來列印生成器中的資料,則會得到以下的結果:

for g in gen:

print

(g)

[1,

2,3]

1[4,

5]2[finished in

0.9s]

所以大膽猜想:for迴圈其實就是對in後面的生成其逐步執行next操作,不知道對不對。

用yield關鍵詞實現列表的完全展開

我們可以使用以下 來優雅地實現對多級列表的完全展開,依次讀取不同層級列表的各個數值 關鍵知識點是yield from這句話,表示再次進入到生成器deep flatten中。def deep flatten lst for i in lst iftype i list yield from deep ...

python中的yield關鍵詞用法總結

為了理解yield是什麼,首先要明白生成器 generator 是什麼,在講生成器之前先說說迭代器 iterator 當建立乙個列表 list 時,你可以逐個的讀取每一項,這就叫做迭代 iteration mylist 1 2,3 for i in mylist print i 1 23mylist...

二 關鍵詞 關鍵詞的選擇(二)

1 內容相關 2 搜尋次數多,競爭小 5 商業價值 一 內容相關 當然,這也不一定試用於某些 比如新聞門戶或者純粹依靠廣告贏利的資訊類 很多門戶類 包羅永珍,內容相關性判斷也比較模糊。對這些 來說,只要有流量,就有一定的價值,並不依靠本身的轉化贏利。二 搜尋次數多,競爭小 一般行業通稱都是國語寬泛的...