推 OGCKM: 試試用iterator而不是用元素的陣列位置 05/16 13:50
原來可以直接取用元素,謝謝你
→ mikapauli: 做1個複製,不要改變A 05/16 13:52
這部分我另一部分有這樣做,但是這邊是真的要刪光她XD
謝謝你
→ mikapauli: 你的例子可以直接 05/16 15:00
→ mikapauli: list(map((1).__sub__, 05/16 15:00
→ mikapauli: filter((2).__rmod__, map((1).__sub__, A)))) 05/16 15:00
→ mikapauli: list(filter((2).__rmod__, A)) 05/16 15:01
這...看不懂QQ,我先查一下filter跟map好了
→ bigpigbigpig: 請勿在迴圈內任意新增、刪除、修改 iterable 的內容 05/16 16:38
可以問一下為什麼不行嗎? pop不是也是刪掉用的?
→ bigpigbigpig: 現在你刪掉的是 list 內的元素,尚有序可循,改天 05/16 22:15
→ bigpigbigpig: 如果刪掉dict或set的元素,可能會找不到應該在其中 05/16 22:16
→ 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一併找不到嗎?
→ bigpigbigpig: dict{'a','b','c','d','e'}就很有可能,無論如何, 05/16 22:36
→ bigpigbigpig: Fluent Python 指出應避免在迴圈中更動 iterable 05/16 22:38
好的,謝謝,那我修改看看好了,現在看來Python的for用途好像跟C的for差有點多ORZ
→ mikapauli: 建議你可以直接描述你要做的事情。你舉的兩個例子有點 05/17 01:52
→ mikapauli: 太簡化以致於有很多不知道是不是特例的情況。像是A的元 05/17 01:56
→ 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
但還在研究到底怎麼做
→ bigpigbigpig: list comprehension 可以一步做到 map 和 filter 05/17 02:39
→ bigpigbigpig: 組合運用的功能,其實就是我前面推文給的程式碼片段 05/17 02:40
了解,原來big大的那種用法叫做list comprehension (筆記
我覺得list comprehension看起來好像是做篩選+簡單地處理
函式部分應該可以獨立寫吧? 如果很長的函式擺進去看起來會很長吧XD
→ bigpigbigpig: 你看過用list comprehension寫的巴斯卡三角會很感動 05/17 07:34
喔喔喔喔喔 我查到了 看起來好像可以拿來改成我想要弄得,感謝
→ bigpigbigpig: 新增問題:from itertools import combinations 05/17 19:19
→ bigpigbigpig: A = [1, 2, 3, 4, 5] 05/17 19:19
→ bigpigbigpig: B = [ tuple(c) for c in combinations(A,2) 05/17 19:20
→ 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
不知道我這樣理解有沒有錯
推 s06yji3: 你這是邏輯問題,跟python沒有太大的關係 05/18 18:38
這種解法我還真想不到 直覺會想用兩個for 非常感謝你提供另一種思考方式
→ bibo9901: 你可以sort完 用兩個指標 一個從左掃 另一個從右掃 05/18 20:17
→ bibo9901: 掃到相撞就解決了 05/18 20:18
這樣也不錯耶,可以節省掃描次數,不過python也有指標?
推 s06yji3: 此指標非比指標,他的意思是用i,j。binary search 05/18 23:33
推 s06yji3: sorry,不是binary search 05/18 23:37
→ bibo9901: 如樓上所說. 用 index 就能代表指標 05/19 00:19
哦哦 了解 i從頭j從尾這樣 我一個問題解法好多哦XDDD 謝謝大家各種建議
※ 編輯: dream0830 (123.195.114.31), 05/19/2016 01:22:16
推 eight0: B = [(i, 6 - i) for i in A if i < 3 and 6 - i in A] 05/19 03:21
推 s06yji3: 樓上好厲害QQ 05/19 10:43
看懂後覺得好強OAO
※ 編輯: dream0830 (123.195.114.31), 05/19/2016 15:20:47
推 kanggy: e大好厲害 O.O 05/19 16:22
推 ray60110: 一行解真的很猛 05/19 21:57
→ s860134: 真的突破盲點 用相反角度來完成 05/20 01:52