Re: [問題] for迴圈問題
※ 引述《uranusjr (←這人是超級笨蛋)》之銘言:
: ※ 引述《WaiTingKuo (:!)》之銘言:
: : In [12]: a = [1, 2, 3, 4, 5, 6]
: : In [13]: for x, y, in zip(*[iter(a)]*2):
: : ....: print x, y
: : ....:
: : 1 2
: : 3 4
: : 5 6
: 推 EntHeEnd:請問*[iter(a)]是什麼意思...@@? 07/12 00:55
: 你的運算優先權錯了 =p
: a 是 list (i.e. a 是 iterable)
: iter(a) 會得到 a 的 iterator
: [iter(a)] 就包成一個單一元素的 list
: [iter(a)] * 2 會得到一個有兩個元素的 list(而且兩個元素會相同)
: *[iter(a)] * 2 會把這個 list 展開成 zip 的兩個參數
: 事實上 zip(*[iter(a)]*2) 就等同於
: a_iter = iter(a)
: zip(a_iter, a_iter)
: 事實上由於 iter 是回傳 reference, zip(iter(a), iter(a)) 也完全對等
是指 [iter(a)] * 2 跟 iter(a), iter(a) 比較嗎?
如果是的話,這不對等喔。
e.g.
In [3]: a = range(4)
In [4]: a
Out[4]: [0, 1, 2, 3]
In [5]: for k,v in zip( * [ iter(a)]*2 ) : print k,v
0 1
2 3
In [7]: for k,v in zip( iter(a), iter(a) ) : print k,v
0 0
1 1
2 2
3 3
ps: 我也不喜歡 list 的 乘法 ~
: 如果是我的話應該會這樣寫, 我個人很討厭 list 乘法...
: 用 iter 的好處是不用複製一個 list, 也不會需要大量 random access
: 所以效率會比較好
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.166.79
※ 編輯: timTan 來自: 111.248.166.79 (07/12 02:40)
→
07/12 02:48, , 1F
07/12 02:48, 1F
推
07/17 11:09, , 2F
07/17 11:09, 2F
→
07/17 11:09, , 3F
07/17 11:09, 3F
討論串 (同標題文章)