python中列表推導(dǎo)和生成器的區(qū)別

1.語法區(qū)別

(1)迭代器用[]生成,如:[x*xforxinrange(3)]

(2)生成器用()生成,如:(x*xforxinrange(3))

2.生成結(jié)果區(qū)別

(1)迭代器生成一個list列表,可以多次被迭代取值

(2)生成器生成一個generator生成器,迭代取值只能用一次,并且結(jié)果只能通過迭代的方式取值或者next()方法取值,一次迭代完之后結(jié)果就是一個[]空列表,如下:

mygenerator= (x*xforxinrange(3))

#----------

print mygenerator[0],mygenerator[2]#報錯TypeError: 'generator' object has no attribute '__getitem__'

#---------------

for a in mygenerator:

print"a=",a

for b in mygenerator:#這次獲取空

print"b=",b

#-----------

mygenerator2= [x*x for x in mygenerator]

print "mygenerator2=",mygenerator2

print type(mygenerator2)

mygenerator3 = [x*x for x in mygenerator]

print "mygenerator3=",mygenerator3

print type(mygenerator3)

結(jié)果:

mygenerator2= [0, 1, 16]

mygenerator3= []

參考:http://python.jobbole.com/81881/

https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容