作者dream0830 (异影)
看板Python
标题Re: [问题] Python List增减 (已解决 非常感谢)
时间Thu May 26 02:32:16 2016
各位再次好
非常感谢各位上篇的帮忙
我後来又尝试了回应中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的其他函数
但是好像找不到可以用於简化目前程式的工具
因此想再次请教各位
有没有办法使其再简化一点
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.114.31
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1464201141.A.7BA.html
1F:→ dream0830: 目前把check的部分删除了 因为有重复会直接return就不 05/26 04:36
2F:→ dream0830: 用做check了 05/26 04:36
3F:推 eight0: 用 collections.Counter 05/26 05:25
谢谢
可是我觉得虽然单一个元素筛选起来很方便,用於两个元素好像不太适合呢
我若找了2-i,我也分不清楚是哪一组(如果资料更多的情形)
序号是想让他个别独立
不过用counter先把个别value先分类好像也不错 ,来改改看好了
5F:推 KJFC: 有些c要写个好几行 py一个collect就解决了 05/26 12:02
6F:→ uranusjr: 我觉得这个问题要先回到根本来分析, 才能设计出好的写法 05/26 13:06
7F:→ uranusjr: 这个需要从需求开始看, 晚点来完整回一下好了 05/26 13:07
好的谢谢你
8F:推 s06yji3: (1,2)和(4,0)还是(1,2)和(5,0)? id小的先取? 05/26 20:42
id的顺序不重要,先遇到就先配,如果(5,0)摆得比(4,0)还前面,那就会是1050
※ 编辑: dream0830 (123.195.114.31), 05/26/2016 21:11:00
10F:→ s06yji3: 我用dict来确认和是不是2(或1),是的话就加入到tmp,并 05/26 21:14
11F:→ s06yji3: 把存在dict的item删掉,如果不存在的话就加到dict 05/26 21:15
12F:→ s06yji3: return有两个list,一个是匹配好的,另一个是剩下的 05/26 21:16
13F:推 s06yji3: 痾....有bug请先忽略QQ 05/26 21:25
对耶 我想说去比我分出来的组确认有没有分配过就好了,结果组成一对反而难比
用一个新的,这样比较好比,赞赞~ 感谢想法~
※ 编辑: dream0830 (123.195.114.31), 05/26/2016 21:45:50
14F:推 s06yji3: 修好了QQ 05/26 22:09
15F:→ s06yji3: bug是没匹配到的数据会被洗掉 05/26 22:10
ok的啦 我容易钻牛角尖 想了a就想不到b 感谢你提供新想法XD
※ 编辑: dream0830 (123.195.114.31), 05/27/2016 00:25:07
17F:→ penguin7272: 或 value 之类的的命名, 所以还是要看本来的问题 05/27 02:05
谢谢帮忙,我又查了一下defaultdict是什麽才弄懂你的写法
另外想请问 我试着让ID重复,想找出个别ID中最多的值
listA = [(0,1),(1,2),(1,3),(2,1),(2,2),(3,1),(4,0),(5,0),(6,3)]
我把原本的listA的ID 1跟2各增加一个 然後想找出listA里面KEY最多的
我尝试了defaultdict,写这样
result = defaultdict(int)
for id,num in listA:
result[id] += 1
for k, v in result.items():
print(k,v)
我这样能获得每个ID各有几组在里面
但是我希望能把最大值的ID筛出来 放到MaxList中,字典或list都可以
MaxList = {1,2} 或者 MaxList = [1,2] 因为ID为1跟2的各别都两组所以最大
目前用了max,但是失败(我想是後面我放错了 我想max v,输出k)
新手问题多 还烦请指教 m(_ _)m
※ 编辑: dream0830 (123.195.114.31), 05/28/2016 04:51:15
18F:→ dream0830: 感谢各位热心帮忙 05/28 04:51
19F:→ dream0830: max(result, key=lambda item, item[1] 05/28 05:04
20F:→ dream0830: 自解 MAX最大後再筛出其他一样大的 05/29 03:20