Merging ordered lists
Peter Otten
__peter__ at web.de
Sun Jun 1 04:49:34 EDT 2008
Peter Otten wrote:
> #untested
Already found two major blunders :(
# still untested
import difflib
def _merge(a, b):
sm = difflib.SequenceMatcher(None, a, b)
for op, a1, a2, b1, b2 in sm.get_opcodes():
if op == "insert":
yield b[b1:b2]
elif op == "replace":
yield a[a1:a2]
yield b[b1:b2]
else: # delete, equal
yield a[a1:a2]
def merge(a, b):
return sum(_merge(a, b), [])
def merge_to_unique(sources):
return unique(reduce(merge, sorted(sources, key=len, reverse=True)))
def unique(items):
u = set(items)
if len(u) == len(items):
return items
result = []
for item in items:
if item in u:
result.append(item)
u.remove(item)
return result
More information about the Python-list
mailing list