listL = ['aaa', 'bbb', 'ccc', 'bbb', 'eee', 'hhhh']
listR = ['bbb', 'ddd', 'eee', 'fff', 'ggg', 'iiiii']
setL = set(listL)
setR = set(listR)
print '[left only] %s' % ' '.join(sorted(list(setL - setR)))
print '[right only] %s' % ' '.join(sorted(list(setR - setL)))
print '[both] %s' % ' '.join(sorted(list(setL & setR)))
all_items = sorted(list(setL | setR))
max_left_item_length = max([len(v) for v in setL])
output_format = '%%-%ds | %%s' % max_left_item_length
for out in [(v in setL and v or '', v in setR and v or '') for v in all_items]:
print output_format % out