fork download
  1. from functools import partial
  2.  
  3. def sorted_symmetric_difference(sorted_a, sorted_b, done=object()):
  4. # O(n) time, O(1) space
  5. sorted_a, sorted_b = iter(sorted_a), iter(sorted_b)
  6. next_a, next_b = partial(next, sorted_a, done), partial(next, sorted_b, done)
  7.  
  8. a, b = next_a(), next_b()
  9. while a is not done and b is not done:
  10. if a == b: # skip
  11. a = next_a()
  12. b = next_b()
  13. elif b < a:
  14. yield b
  15. b = next_b()
  16. else:
  17. yield a
  18. a = next_a()
  19.  
  20. item, rest = (a, sorted_a) if b is done else (b, sorted_b)
  21. if item is not done:
  22. yield item
  23. #### Python 3.3
  24. ####yield from rest
  25. for item in rest:
  26. yield item
  27.  
  28.  
  29. import ast
  30.  
  31. a, b = [ast.literal_eval(input()) for _ in range(2)]
  32. print(list(sorted_symmetric_difference(a, b)))
  33.  
Success #stdin #stdout 0.15s 10256KB
stdin
[1,2,5,7,9]
[1,2,4,8,9]
stdout
[4, 5, 7, 8]