看板 Python 關於我們 聯絡資訊
※ 引述《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)) 也完全對等 如果是我的話應該會這樣寫, 我個人很討厭 list 乘法... 用 iter 的好處是不用複製一個 list, 也不會需要大量 random access 所以效率會比較好 -- 「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。 如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」 -- 班尼多‧加羅素,前義大利藍隊成員 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146 ※ 編輯: uranusjr 來自: 114.32.81.146 (07/12 01:34)
timTan:優先權的問題我也想了一下,這行 code 的濃度很高阿! 07/12 02:32
EntHeEnd:喔喔... 謝謝! 07/13 16:35