s***e 发帖数: 122 | 2 仔细看了一下你的方法,发现我的思路完全就是copy你的。。呵呵
我只对你的代码改了一点:第二遍扫描可以不用,因为第一遍扫描进去的时候实际上保
持了顺序的。(我查了一下你的list(set(g))好像会排序,为了保险我又sort了一下。) 所以只需要在合并group[groupid]和group[dupid]之后,把group[dupid]
清空就可以了。输出的时候只需要忽略空group就可以了。
感叹一下这类代码用python写起来真是简单清晰。
seqlist = [['abstract', 'b'],['c','d'],['d','e','f','b'], ['h','i']]
group, hash = [], {}
for seq in seqlist:
....n = len(group)
....g = [hash.get(id, n) for id in seq]
....groupid = min(g)
....if groupid == n:
........group.append([])
....else:
........g_sorted = list(set( |
|