Re: [問題] list的iterator應用問題
原po的程式碼可以說是generator版本的list comprehension,
什麼是list comprehension?
其實把原敘述的左右小括號改成中括號就是了,如下:
>>> test = [(x,y) for x in range(3) for y in range(x)]
會產生出類似的結果:
>>> test
[(1, 0), (2, 0), (2, 1)]
test會是一個list。這樣子的敘述其實等價於:
>>> test = []
>>> for x in range(3):
for y in range(x):
test.append((x,y))
(從上述程式碼原po大概就可以理解為什麼會有那樣的output了吧!)
list comprehension提供了一個更快速的方式建立起一個有規律的list,
x和y也會被清理掉而不會像下面那種方式依然存在。
但原po的程式碼則叫做generator expression:
>>> test = ((x,y) for x in range(3) for y in range(x))
得到的test會是一個generator,是一種iterator,
可以透過next()取得下一個值直到沒有東西,
>>> next(test)
(1, 0)
>>> next(test)
(2, 0)
>>> next(test)
(2, 1)
>>> next(test)
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
next(test)
StopIteration
也可以像原po一樣透過for迴圈取值出來,
所以會得到類似list comprehension的結果。
那樣的敘述等價於:
>>> def test():
for x in range(3):
for y in range(x):
yield(x,y)
>>> test = test()
generator expression省去了建立generator function,實作iterator class的麻煩。
※ 引述《Neverfor (yorker)》之銘言:
: test=( (x, y) for x in range ( 3 ) for y in range (x) )
: for x,y in test:
: print(x,y)
: output:
: 1 0
: 2 0
: 2 1
: 不好意思 看了很久想不出來程式碼第一行跟結果的關係QQ
: 這種用法是什麼意思呢?
: 想問
: 1. (x,y)是否代表 輸出的iterator 1個elemeny 是 (x,y)
: 2.迴圈看不太懂意思
: 前面的for x 是否是後面y range的x
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.202.245
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1467425395.A.84B.html
※ 編輯: max80713 (118.168.202.245), 07/02/2016 10:14:59
※ 編輯: max80713 (118.168.202.245), 07/02/2016 10:21:00
推
07/02 13:37, , 1F
07/02 13:37, 1F
※ 編輯: max80713 (42.73.86.45), 07/02/2016 14:04:02
推
07/02 21:54, , 2F
07/02 21:54, 2F
推
07/02 21:56, , 3F
07/02 21:56, 3F
→
07/02 22:19, , 4F
07/02 22:19, 4F
→
07/02 22:19, , 5F
07/02 22:19, 5F
→
07/02 22:19, , 6F
07/02 22:19, 6F
→
07/02 22:19, , 7F
07/02 22:19, 7F
推
07/02 22:37, , 8F
07/02 22:37, 8F
推
07/03 03:40, , 9F
07/03 03:40, 9F
推
07/03 04:18, , 10F
07/03 04:18, 10F
推
07/03 14:46, , 11F
07/03 14:46, 11F
→
07/03 15:42, , 12F
07/03 15:42, 12F
→
07/03 15:42, , 13F
07/03 15:42, 13F
→
07/03 15:42, , 14F
07/03 15:42, 14F
推
07/04 00:04, , 15F
07/04 00:04, 15F
推
07/04 10:03, , 16F
07/04 10:03, 16F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章