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

2021-10-14 05:28:32 字數 2833 閱讀 3020

列表推導式

字典推導式和元組推導式類似

列表推導式格式

[表示式 for 變數 in 可迭代 [if 條件] ]

兩個列子 乙個有if乙個沒有if

list1 =[[

1,2,

3],[

4,5,

6],[

1,3,

5]]name =

[x[2

]for x in list1]

#結果[3, 6, 5]

列表推導式是可以使用兩個for的

name =

[(x, y)

for x in

range(0

,11)if x %2==

0for y in

range(0

,11)if y %2==

1]print

(name)

# 結果是[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9)....]

列表推導式第三種

[表示式 if 條件 else 表示式for 變數 in 可迭代 ]

index =

index1 =

index2 =

index3 =

list1 =

[index, index1, index2, index3]

hello =

[if y[

'salary'

]>

5000

else

for y in list1]

print

(hello)

#結果是[, , , ]

生成器

生成器的產生是為了節約記憶體 ,比如要建立列表推導式生成一萬個資料生命成功後就會一直占用記憶體 非常消耗記憶體 所有就有了生成器這個玩具,需要使用就取乙個,取的時候一般用__next()__next()

第一種生成生成器的方式把列表推導式的中括號變為小括號

name =

(x for x in

range(10

))print

(name.__next__())

print

(next

(name)

)# 0

# 1

第二種方式在函式中加yield關鍵字 yield關鍵字會讓函式執行的時候停在這個位置等待下一次的執行並且可以返回值

def

func

(length)

: a, b =0,

1 n =

0while

true

:if n < length:

n +=

1print

(b)# 這個位置停止等待下一次呼叫

yield b

a, b = b, a+b

else

:return

'列印完畢'

x = func(8)

x.__next__(

)x.__next__(

)x.__next__(

)x.__next__(

)x.__next__(

)x.__next__(

)x.__next__()#1

#1#2

#3#5

#8#13

send(self,value)方法不僅僅可以迭代生成器還可以給生成器的返回值賦值 value值第一次只能給none

def

func

(length)

: a, b =0,

1 n =

0while

true

:if n < length:

n +=

1print

(b) tep =

yield b

print

(tep)

a, b = b, a+b

else

:return

'列印完畢'

x = func(8)

x.__next__(

)x.__next__(

)x.__next__(

)print

(x.send(

none))

print

(x.send(

'hello'))

print

(x.send(

'hello'))

print

(x.send(

'hello'))

# 如果迭代的次數超過了生成器的長度那麼會報出異常

#1#none

#1#none

#2#none

#3#3

#hello

#5#5

#hello

#8#8

#hello

#13#13

迭代器

迭代器是最高的層次

可迭代的並且可以是由next()和__next()方法迭代的為迭代器

迭代器只能前進不能後退 他是訪問集合元素的一種方式

迭代器分為兩大類(1 本身可以使用next()和__next(), 2 通過iter(iterable) 把可迭代的轉換為迭代器)

所以能夠被迭代的不一定是迭代器 迭代器一定是可迭代的 比如list

生成器,生成器推導式和列表推導式

python社群,大部分生成器和迭代器是一種 生成器的本質是迭代器 唯一區別 生成器是我們自己用python 構建的資料結構 迭代器都是提供的,或者轉化得來的 生成器函式 生成器表示式 python提供的 yield 乙個next 對應乙個yield yield和下乙個yield中間有 的話只執行乙...

生成器及列表推導式

迭代器 內部含有 iter next 方法的物件 可迭代物件不能取值,因為內部沒有 next 的方法 迭代器的優點 1 節省記憶體 2 惰性機制 3 單向 不可逆 如何判斷可迭代物件 迭代器 1 iter in dir obj 2 引用乙個模組 from collections import ite...

python生成器推導式

1.生成器推導式是繼列表推導式後的有一中python推導式,他比列表推導式速度更快,占用的記憶體也更少。2.使用生成器物件時,可以根據需要將他轉化為列表或者元組,也可以是喲個生成器對像 next 方法或內建函式next 進行遍歷,其具有惰性求值的特點,進行一次遍歷後便不能再次方位內部元素,即訪問一次...