Python 板


LINE

各位好 我是python新手,原本是寫C為主 最近在嘗試python,有些問題想請教各位 我設定了一個List 想用for去做篩選,篩選出來我就把它放到另一個List中 目前的架構大概是這樣 (簡化版本) A = [1,2,3,4,5] B = [] for i in range(len(A)): if A[i] % 2 ==0 B.append(A[i]) A.remove(A[i]) 但是我發現篩選到最後 一定會出現 IndexError: list index out of range 我猜想這部分應該是因為我移除了List元素後, A的長度縮減,原本A[5]可能變成A[4],而i繼續遞增,導致檢查不到 我嘗試找相關的解法,但是抓不到關鍵字 拜託各位指教了,非常感謝 新增問題 請問若以iterator的方式 要怎麼做雙重迴圈以上的篩選呢 一般使用C的時候 因為是用陣列位置,所以就是用i , i+1就可以了 難道python可以直接抽一組出來? 例如我要把上面 A的元素 相加為6的元素組起來放到B裡面 直覺我是用 for i ... for j=i+1 ... 一一去比對 可是照下面O大的方法,直接提取元素應該是不能這樣+1的吧? 謝謝各位不吝指教 (鞠躬 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.114.31
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1463376663.A.97F.html
1F:推 OGCKM: 試試用iterator而不是用元素的陣列位置 05/16 13:50
2F:→ OGCKM: 範例:http://goo.gl/sNXo8F 05/16 13:50
原來可以直接取用元素,謝謝你
3F:→ mikapauli: 做1個複製,不要改變A 05/16 13:52
這部分我另一部分有這樣做,但是這邊是真的要刪光她XD 謝謝你
4F:→ mikapauli: 你的例子可以直接 05/16 15:00
5F:→ mikapauli: list(map((1).__sub__, 05/16 15:00
6F:→ mikapauli: filter((2).__rmod__, map((1).__sub__, A)))) 05/16 15:00
7F:→ mikapauli: list(filter((2).__rmod__, A)) 05/16 15:01
這...看不懂QQ,我先查一下filter跟map好了
8F:→ bigpigbigpig: https://ideone.com/byJO6e 05/16 16:36
9F:→ bigpigbigpig: 請勿在迴圈內任意新增、刪除、修改 iterable 的內容 05/16 16:38
可以問一下為什麼不行嗎? pop不是也是刪掉用的?
10F:→ bigpigbigpig: 現在你刪掉的是 list 內的元素,尚有序可循,改天 05/16 22:15
11F:→ bigpigbigpig: 如果刪掉dict或set的元素,可能會找不到應該在其中 05/16 22:16
12F:→ bigpigbigpig: 的元素(更動了hash),可參閱 Fluent Python Ch 3。 05/16 22:18
意思是 我的A是list[1,2,3,4,5],刪除1,2 還不會影響 但是若 A是 dict {1,2,3,4,5},刪除1,2 可能會導致3,4,5一併找不到嗎?
13F:→ bigpigbigpig: dict{'a','b','c','d','e'}就很有可能,無論如何, 05/16 22:36
14F:→ bigpigbigpig: Fluent Python 指出應避免在迴圈中更動 iterable 05/16 22:38
好的,謝謝,那我修改看看好了,現在看來Python的for用途好像跟C的for差有點多ORZ
15F:→ mikapauli: 建議你可以直接描述你要做的事情。你舉的兩個例子有點 05/17 01:52
16F:→ mikapauli: 太簡化以致於有很多不知道是不是特例的情況。像是A的元 05/17 01:56
17F:→ mikapauli: 素不會重覆嗎 05/17 01:56
我想說簡化後比較好描述QQ,然後我自己在測試也比較簡單這樣 重複性基本上不會,我把它簡化成1,2,3 而實際上可能是(1,1,2,3,9),(1,1,3,4,7),(2,1,3,4,7)之類的組合 因為有做序號區分,第一個就是序號 序號可能一樣,但序號一樣時,其他屬性不會完全重複 第二個我是想要做分組 例如 A= [1,2,3,4,5] B=[] 我想要讓A裡面可以相加為6的一組 篩選後的結果變成 A = [3] B = [(1,5),(2,4)] 如果我用C寫就是會用兩個FOR去比對 1先跟2345配對 找到5 取出 (1,5)放到B 2跟剩下的 34配對 找到4 取出 (2,4)放到B 3沒人配了 只好留著 根據B大的建議,不要修改A,所以目前是想這樣弄,但是覺得怪怪的ORZ For i in A: For j in A: if i+j ==6 B.append(i,j) else NewA.append(i) 查了map和filter那些的用法,看起來好像可以用map 但還在研究到底怎麼做
18F:→ bigpigbigpig: list comprehension 可以一步做到 map 和 filter 05/17 02:39
19F:→ bigpigbigpig: 組合運用的功能,其實就是我前面推文給的程式碼片段 05/17 02:40
了解,原來big大的那種用法叫做list comprehension (筆記 我覺得list comprehension看起來好像是做篩選+簡單地處理 函式部分應該可以獨立寫吧? 如果很長的函式擺進去看起來會很長吧XD
20F:→ bigpigbigpig: 你看過用list comprehension寫的巴斯卡三角會很感動 05/17 07:34
喔喔喔喔喔 我查到了 看起來好像可以拿來改成我想要弄得,感謝
21F:→ bigpigbigpig: 新增問題:from itertools import combinations 05/17 19:19
22F:→ bigpigbigpig: A = [1, 2, 3, 4, 5] 05/17 19:19
23F:→ bigpigbigpig: B = [ tuple(c) for c in combinations(A,2) 05/17 19:20
24F:→ bigpigbigpig: if sum(c) == 6 ] 05/17 19:20
OAO,我自己改了半天還是不會動ORZ 感謝 B = [ tuple(c) for c in combinations(A,2) if sum(c) == 6 ] 所以這邊是 combinations(A,2) 先列出 1,2 2,3 3,4 4,5 1,3 2,4 3,5 1,4 2,5 1,5 然後用if sum(c)=6 篩選掉不符合的部分 最後再用tuple定義剩下的C型態,然後放進B 不知道我這樣理解有沒有錯
25F:推 s06yji3: 你這是邏輯問題,跟python沒有太大的關係 05/18 18:38
26F:→ s06yji3: https://goo.gl/bH5Lat 05/18 18:38
這種解法我還真想不到 直覺會想用兩個for 非常感謝你提供另一種思考方式
27F:→ bibo9901: 你可以sort完 用兩個指標 一個從左掃 另一個從右掃 05/18 20:17
28F:→ bibo9901: 掃到相撞就解決了 05/18 20:18
這樣也不錯耶,可以節省掃描次數,不過python也有指標?
29F:推 s06yji3: 此指標非比指標,他的意思是用i,j。binary search 05/18 23:33
30F:推 s06yji3: sorry,不是binary search 05/18 23:37
31F:→ bibo9901: 如樓上所說. 用 index 就能代表指標 05/19 00:19
哦哦 了解 i從頭j從尾這樣 我一個問題解法好多哦XDDD 謝謝大家各種建議 ※ 編輯: dream0830 (123.195.114.31), 05/19/2016 01:22:16
32F:推 eight0: B = [(i, 6 - i) for i in A if i < 3 and 6 - i in A] 05/19 03:21
33F:推 s06yji3: 樓上好厲害QQ 05/19 10:43
看懂後覺得好強OAO ※ 編輯: dream0830 (123.195.114.31), 05/19/2016 15:20:47
34F:推 kanggy: e大好厲害 O.O 05/19 16:22
35F:推 ray60110: 一行解真的很猛 05/19 21:57
36F:→ s860134: 真的突破盲點 用相反角度來完成 05/20 01:52







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP