_set.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. class set:
  2. def __init__(self, iterable=None):
  3. iterable = iterable or []
  4. self._a = {}
  5. for item in iterable:
  6. self.add(item)
  7. def add(self, elem):
  8. self._a[elem] = None
  9. def discard(self, elem):
  10. if elem in self._a:
  11. del self._a[elem]
  12. def remove(self, elem):
  13. del self._a[elem]
  14. def clear(self):
  15. self._a.clear()
  16. def update(self,other):
  17. for elem in other:
  18. self.add(elem)
  19. return self
  20. def __len__(self):
  21. return len(self._a)
  22. def copy(self):
  23. return set(self._a.keys())
  24. def __and__(self, other):
  25. return {elem for elem in self if elem in other}
  26. def __sub__(self, other):
  27. return {elem for elem in self if elem not in other}
  28. def __or__(self, other):
  29. ret = self.copy()
  30. for elem in other:
  31. ret.add(elem)
  32. return ret
  33. def __xor__(self, other):
  34. ret = set()
  35. for elem in self:
  36. if elem not in other:
  37. ret.add(elem)
  38. for elem in other:
  39. if elem not in self:
  40. ret.add(elem)
  41. return ret
  42. def union(self, other):
  43. return self | other
  44. def intersection(self, other):
  45. return self & other
  46. def difference(self, other):
  47. return self - other
  48. def symmetric_difference(self, other):
  49. return self ^ other
  50. def __eq__(self, other):
  51. if not isinstance(other, set):
  52. return NotImplemented
  53. return len(self ^ other) == 0
  54. def isdisjoint(self, other):
  55. return len(self & other) == 0
  56. def issubset(self, other):
  57. return len(self - other) == 0
  58. def issuperset(self, other):
  59. return len(other - self) == 0
  60. def __contains__(self, elem):
  61. return elem in self._a
  62. def __repr__(self):
  63. if len(self) == 0:
  64. return 'set()'
  65. return '{'+ ', '.join([repr(i) for i in self._a.keys()]) + '}'
  66. def __iter__(self):
  67. return iter(self._a.keys())