[perl-python] exercise: partition a list by equivalence
Paul McGuire
ptmcg at austin.rr.com
Thu Feb 24 16:43:12 EST 2005
A slightly better version, only walks the set of cumulative list of
sets once per pairing.
-- Paul
. import sets
.
. input = [[1, 2], [3, 4], [2, 3], [4, 5]]
. input = [[1, 2], [3, 4], [4, 5]]
. input = [[1, 2],[2,1], [3, 4], [4, 5],[2,2],[2,3],[6,6]]
.
.def merge(pairings):
. ret = []
. for a,b in pairings:
. aset = None
. bset = None
. for s in ret:
. if not aset and a in s:
. aset = s
. if not bset and b in s:
. bset = s
. if aset and bset:
. break
. else:
. if aset:
. aset.add(b)
. elif bset:
. bset.add(a)
. else:
. ret.append(sets.Set([a,b]))
. continue
. if aset is not bset:
. ret.remove(aset)
. ret.remove(bset)
. ret.append(aset.union(bset))
.
. return [list(s) for s in ret]
.
.print merge(input)
More information about the Python-list
mailing list