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