[問題] Python List增減 (已解決 非常感謝)
各位好
我是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://www.ptt.cc/bbs/Python/M.1463376663.A.97F.html
推
05/16 13:50, , 1F
05/16 13:50, 1F
→
05/16 13:50, , 2F
05/16 13:50, 2F
原來可以直接取用元素,謝謝你
→
05/16 13:52, , 3F
05/16 13:52, 3F
這部分我另一部分有這樣做,但是這邊是真的要刪光她XD
謝謝你
→
05/16 15:00, , 4F
05/16 15:00, 4F
→
05/16 15:00, , 5F
05/16 15:00, 5F
→
05/16 15:00, , 6F
05/16 15:00, 6F
→
05/16 15:01, , 7F
05/16 15:01, 7F
這...看不懂QQ,我先查一下filter跟map好了
→
05/16 16:36, , 8F
05/16 16:36, 8F
→
05/16 16:38, , 9F
05/16 16:38, 9F
可以問一下為什麼不行嗎? pop不是也是刪掉用的?
→
05/16 22:15, , 10F
05/16 22:15, 10F
→
05/16 22:16, , 11F
05/16 22:16, 11F
→
05/16 22:18, , 12F
05/16 22:18, 12F
意思是 我的A是list[1,2,3,4,5],刪除1,2 還不會影響
但是若 A是 dict {1,2,3,4,5},刪除1,2 可能會導致3,4,5一併找不到嗎?
→
05/16 22:36, , 13F
05/16 22:36, 13F
→
05/16 22:38, , 14F
05/16 22:38, 14F
好的,謝謝,那我修改看看好了,現在看來Python的for用途好像跟C的for差有點多ORZ
→
05/17 01:52, , 15F
05/17 01:52, 15F
→
05/17 01:56, , 16F
05/17 01:56, 16F
→
05/17 01:56, , 17F
05/17 01:56, 17F
我想說簡化後比較好描述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
但還在研究到底怎麼做
→
05/17 02:39, , 18F
05/17 02:39, 18F
→
05/17 02:40, , 19F
05/17 02:40, 19F
了解,原來big大的那種用法叫做list comprehension (筆記
我覺得list comprehension看起來好像是做篩選+簡單地處理
函式部分應該可以獨立寫吧? 如果很長的函式擺進去看起來會很長吧XD
→
05/17 07:34, , 20F
05/17 07:34, 20F
喔喔喔喔喔 我查到了 看起來好像可以拿來改成我想要弄得,感謝
→
05/17 19:19, , 21F
05/17 19:19, 21F
→
05/17 19:19, , 22F
05/17 19:19, 22F
→
05/17 19:20, , 23F
05/17 19:20, 23F
→
05/17 19:20, , 24F
05/17 19:20, 24F
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
不知道我這樣理解有沒有錯
推
05/18 18:38, , 25F
05/18 18:38, 25F
→
05/18 18:38, , 26F
05/18 18:38, 26F
這種解法我還真想不到 直覺會想用兩個for 非常感謝你提供另一種思考方式
→
05/18 20:17, , 27F
05/18 20:17, 27F
→
05/18 20:18, , 28F
05/18 20:18, 28F
這樣也不錯耶,可以節省掃描次數,不過python也有指標?
推
05/18 23:33, , 29F
05/18 23:33, 29F
推
05/18 23:37, , 30F
05/18 23:37, 30F
→
05/19 00:19, , 31F
05/19 00:19, 31F
哦哦 了解 i從頭j從尾這樣 我一個問題解法好多哦XDDD 謝謝大家各種建議
※ 編輯: dream0830 (123.195.114.31), 05/19/2016 01:22:16
推
05/19 03:21, , 32F
05/19 03:21, 32F
推
05/19 10:43, , 33F
05/19 10:43, 33F
看懂後覺得好強OAO
※ 編輯: dream0830 (123.195.114.31), 05/19/2016 15:20:47
推
05/19 16:22, , 34F
05/19 16:22, 34F
推
05/19 21:57, , 35F
05/19 21:57, 35F
→
05/20 01:52, , 36F
05/20 01:52, 36F
Python 近期熱門文章
PTT數位生活區 即時熱門文章