fork download
  1. # list_intersection.py
  2. # MIT OCW 6.189 Homework 3
  3. # Exercise 3.1 – Additional List Practice
  4. # Mechanical MOOC
  5. # Written for Python 3
  6. # Glenn Richard
  7. # July 15, 2013
  8. def list_intersection(list_1, list_2):
  9. # return intersection of list_1 and list_2
  10. return [item for item in list_1 if item in list_2]
  11.  
  12. print("list_intersection")
  13. print(list_intersection([1, 3, 5], [5, 3, 1]))
  14. print(list_intersection([1, 3, 6, 9], [10, 14, 3, 72, 9]))
  15. print(list_intersection([2, 4, 6], [1, 3, 5]))
  16. # but a problem occurs when duplicates appear in a list ...
  17. print(list_intersection([1, 1, 2, 3, 5, 8, 13], [1, 3, 5, 7, 9, 11, 13]))
  18. print(list_intersection([1, 3, 5, 7, 9, 11, 13], [1, 1, 2, 3, 5, 8, 13]))
  19.  
  20. def list_intersection_unique(list_1, list_2):
  21. # return intersection of list_1 and list_2 - essentially, set intersection
  22. # so, each item that appears in both lists appears once in the returned new list
  23. return list({item for item in list_1 if item in list_2})
  24. print("list_intersection_unique")
  25. print(list_intersection_unique([1, 1, 2, 3, 5, 8, 13], [1, 3, 5, 7, 9, 11, 13]))
  26.  
  27.  
  28. def list_intersection_minimalist(list_1, list_2):
  29. # return a new list in which
  30. # each item appears the lesser of the number of times
  31. # that it appears either list
  32. new_list = []
  33. for item in set(list_1):
  34. new_list += [item] * min(list_1.count(item), list_2.count(item))
  35. return new_list
  36. print("list_intersection_minimalist")
  37. print(list_intersection_minimalist([1, 1, 1, 2, 3, 4], [1, 2, 1, 3, 7]))
  38. print(list_intersection_minimalist([1, 2, 1, 3, 7], [1, 1, 1, 2, 3, 4]))
  39.  
Success #stdin #stdout 0.05s 9568KB
stdin
Standard input is empty
stdout
list_intersection
[1, 3, 5]
[3, 9]
[]
[1, 1, 3, 5, 13]
[1, 3, 5, 13]
list_intersection_unique
[1, 3, 5, 13]
list_intersection_minimalist
[1, 1, 2, 3]
[1, 1, 2, 3]