作者honyen (...)
看板Python
標題[問題] for 迴圈取完值,原本zip物件就變空了
時間Mon Apr 10 17:26:32 2017
做法是讀檔案後,將資料放入一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://webptt.com/m.aspx?n=bbs/Python/M.1491816395.A.31A.html
1F:→ zerof: zip是 generator, 只能用一次 04/10 17:33
2F:→ mikapauli: iterator不回頭。這是從functional programming來的 04/10 19:25
3F:→ zerof: .... fp 裡面有 iterator...? 樓上是認真的嗎 04/10 19:42
4F:→ uranusjr: 二樓說的應該是 generator, 不過仍然不太準確, 雖然這個 04/10 21:26
5F:→ uranusjr: 概念是從 functional programming languages 開始流行, 04/10 21:26
6F:→ uranusjr: 但本身與 functional programming 關係不大 04/10 21:27
7F:→ mikapauli: python裡generator繼承自iterator 04/11 14:12
8F:→ mikapauli: 但zip不是generator吧 04/11 14:14
9F:→ mikapauli: zip也沒有send, throw, close等methods 04/11 14:15
10F:→ mikapauli: 至少我看ABC裡是這樣寫的 04/11 14:16
11F:→ s860134: generator iterator iterable 傻傻分不清 04/12 08:47
12F:→ physheepy: 你應該是在用python3 看的範例卻是python2的 04/12 12:37
13F:→ physheepy: zip在python2 是產生new list of turples 所以我用 04/12 12:37
14F:→ physheepy: python2可正常執行 python3中 zip改成 generator 04/12 12:38
15F:推 physheepy: 你原本的code 加一行 zipobj2 = [ x for x in zipobj] 04/12 12:40
16F:→ physheepy: 應該就可以了(我不確定 因為我是用python2 測試看看吧) 04/12 12:40
17F:→ physheepy: 另外處理表格建議使用pandas 04/12 12:41
18F:→ physheepy: 補充一下 雖然加一行可以解決你的問題 但這種用法是違 04/12 12:49
19F:→ physheepy: 背generator精神的 (剛發現更簡單的寫法 04/12 12:50
20F:→ physheepy: zipobj = list(zip(.....)) 04/12 12:51
21F:推 day831231: 為什麼不用一個迴圈包整個呢,發揮generator的特性, 04/18 20:33
22F:→ day831231: 又不用跑兩個迴圈 04/18 20:33