[問題] Python List增減 (已解決 非常感謝)

作者: dream0830 (異影)   2016-05-16 13:31:00
各位好
我是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的吧?
謝謝各位不吝指教 (鞠躬
作者: OGCKM (只有神知道的世界)   2016-05-16 13:50:00
試試用iterator而不是用元素的陣列位置範例:http://goo.gl/sNXo8F
作者: mikapauli (桜花)   2016-05-16 13:52:00
做1個複製,不要改變A你的例子可以直接list(map((1).__sub__,filter((2).__rmod__, map((1).__sub__, A))))list(filter((2).__rmod__, A))
作者: bigpigbigpig (To littlepig with love)   2016-05-16 16:36:00
https://ideone.com/byJO6e請勿在迴圈內任意新增、刪除、修改 iterable 的內容現在你刪掉的是 list 內的元素,尚有序可循,改天如果刪掉dict或set的元素,可能會找不到應該在其中的元素(更動了hash),可參閱 Fluent Python Ch 3。dict{'a','b','c','d','e'}就很有可能,無論如何,Fluent Python 指出應避免在迴圈中更動 iterable
作者: mikapauli (桜花)   2016-05-17 01:52:00
建議你可以直接描述你要做的事情。你舉的兩個例子有點太簡化以致於有很多不知道是不是特例的情況。像是A的元素不會重覆嗎
作者: bigpigbigpig (To littlepig with love)   2016-05-17 02:39:00
list comprehension 可以一步做到 map 和 filter組合運用的功能,其實就是我前面推文給的程式碼片段你看過用list comprehension寫的巴斯卡三角會很感動新增問題:from itertools import combinationsA = [1, 2, 3, 4, 5]B = [ tuple(c) for c in combinations(A,2)if sum(c) == 6 ]
作者: s06yji3 (阿南)   2016-05-18 18:38:00
你這是邏輯問題,跟python沒有太大的關係https://goo.gl/bH5Lat
作者: bibo9901 (function(){})()   2016-05-18 20:17:00
你可以sort完 用兩個指標 一個從左掃 另一個從右掃掃到相撞就解決了
作者: s06yji3 (阿南)   2016-05-18 23:33:00
此指標非比指標,他的意思是用i,j。binary searchsorry,不是binary search
作者: bibo9901 (function(){})()   2016-05-19 00:19:00
如樓上所說. 用 index 就能代表指標
作者: eight0 (欸XD)   2016-05-19 03:21:00
B = [(i, 6 - i) for i in A if i < 3 and 6 - i in A]
作者: s06yji3 (阿南)   2016-05-19 10:43:00
樓上好厲害QQ
作者: kanggy ((我還在,只是熱情不再))   2016-05-19 16:22:00
e大好厲害 O.O
作者: ray60110 (Yen)   2016-05-19 21:57:00
一行解真的很猛
作者: s860134 (s860134)   2016-05-20 01:52:00
真的突破盲點 用相反角度來完成

Links booklink

Contact Us: admin [ a t ] ucptt.com