看板 Python 關於我們 聯絡資訊
做法是讀檔案後,將資料放入一zip物件 zipobj = zip(date2num(r['date']),r['open'],r['close'],r['volume']) dates = [x[0] for x in zipobj] volume = [x[3] for x in zipobj] print dates 後會有資料,但是print volume就會回傳[] 想請問上面for迴圈的做法,會造成原本的zipobj全部清空嗎? 最近開始自學python,這是參考網路上的程式碼, 發現的問題,覺得疑惑… -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.228.206.21 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1491816395.A.31A.html
zerof: zip是 generator, 只能用一次 04/10 17:33
mikapauli: iterator不回頭。這是從functional programming來的 04/10 19:25
zerof: .... fp 裡面有 iterator...? 樓上是認真的嗎 04/10 19:42
uranusjr: 二樓說的應該是 generator, 不過仍然不太準確, 雖然這個 04/10 21:26
uranusjr: 概念是從 functional programming languages 開始流行, 04/10 21:26
uranusjr: 但本身與 functional programming 關係不大 04/10 21:27
mikapauli: python裡generator繼承自iterator 04/11 14:12
mikapauli: 但zip不是generator吧 04/11 14:14
mikapauli: zip也沒有send, throw, close等methods 04/11 14:15
mikapauli: 至少我看ABC裡是這樣寫的 04/11 14:16
s860134: generator iterator iterable 傻傻分不清 04/12 08:47
physheepy: 你應該是在用python3 看的範例卻是python2的 04/12 12:37
physheepy: zip在python2 是產生new list of turples 所以我用 04/12 12:37
physheepy: python2可正常執行 python3中 zip改成 generator 04/12 12:38
physheepy: 你原本的code 加一行 zipobj2 = [ x for x in zipobj] 04/12 12:40
physheepy: 應該就可以了(我不確定 因為我是用python2 測試看看吧) 04/12 12:40
physheepy: 另外處理表格建議使用pandas 04/12 12:41
physheepy: 補充一下 雖然加一行可以解決你的問題 但這種用法是違 04/12 12:49
physheepy: 背generator精神的 (剛發現更簡單的寫法 04/12 12:50
physheepy: zipobj = list(zip(.....)) 04/12 12:51
day831231: 為什麼不用一個迴圈包整個呢,發揮generator的特性, 04/18 20:33
day831231: 又不用跑兩個迴圈 04/18 20:33