Re: [問題] Python List篩選-重複元素

作者: dream0830 (異影)   2016-05-26 02:32:16
各位再次好
非常感謝各位上篇的幫忙
我後來又嘗試了回應中M大所說的 資源重複的情形
我將List中的資料改成(id,value)這種狀態
list = [(0,1),(1,2),(2,1),(3,1),(4,0),(5,0),(6,3)]
然後再從中做分層篩選
第一層 篩選出相加=2的
第二層 篩選出剩下的資料,相加等於1的
第三層 剩餘的資料也保留
(已經用過的不能再用)
如果單純使用Combination
那就會發生重複的情形
像是 ((0,1),(2,1)) 選出來後 之後又有 ((0,1),(3,1))
所以我多加一些if去避免重複
以下是我目前寫的成果
https://ideone.com/OQyEFz
雖然達到了想要的結果
但是覺得實在很冗長
我又查了itertools的其他函數
但是好像找不到可以用於簡化目前程式的工具
因此想再次請教各位
有沒有辦法使其再簡化一點
謝謝
作者: dream0830 (異影)   2016-05-26 04:36:00
目前把check的部分刪除了 因為有重複會直接return就不用做check了
作者: eight0 (欸XD)   2016-05-26 05:25:00
用 collections.Counterhttps://ideone.com/zegl42
作者: KJFC (磁鐵貓)   2016-05-26 12:02:00
有些c要寫個好幾行 py一個collect就解決了
作者: uranusjr (←這人是超級笨蛋)   2016-05-26 13:06:00
我覺得這個問題要先回到根本來分析, 才能設計出好的寫法這個需要從需求開始看, 晚點來完整回一下好了
作者: s06yji3 (阿南)   2016-05-26 20:42:00
(1,2)和(4,0)還是(1,2)和(5,0)? id小的先取?https://ideone.com/jziqGx我用dict來確認和是不是2(或1),是的話就加入到tmp,並把存在dict的item刪掉,如果不存在的話就加到dictreturn有兩個list,一個是匹配好的,另一個是剩下的痾....有bug請先忽略QQ修好了QQbug是沒匹配到的數據會被洗掉
作者: penguin7272 (企鵝)   2016-05-27 02:04:00
https://ideone.com/lnqs0c 可以的話不太想用 idx或 value 之類的的命名, 所以還是要看本來的問題
作者: dream0830 (異影)   2016-05-28 04:51:00
感謝各位熱心幫忙max(result, key=lambda item, item[1]

Links booklink

Contact Us: admin [ a t ] ucptt.com