1
0

_set.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. ret = set()
  26. for elem in self:
  27. if elem in other:
  28. ret.add(elem)
  29. return ret
  30. def __or__(self, other):
  31. ret = self.copy()
  32. for elem in other:
  33. ret.add(elem)
  34. return ret
  35. def __sub__(self, other):
  36. ret = set()
  37. for elem in self:
  38. if elem not in other:
  39. ret.add(elem)
  40. return ret
  41. def __xor__(self, other):
  42. ret = set()
  43. for elem in self:
  44. if elem not in other:
  45. ret.add(elem)
  46. for elem in other:
  47. if elem not in self:
  48. ret.add(elem)
  49. return ret
  50. def union(self, other):
  51. return self | other
  52. def intersection(self, other):
  53. return self & other
  54. def difference(self, other):
  55. return self - other
  56. def symmetric_difference(self, other):
  57. return self ^ other
  58. def __eq__(self, other):
  59. return self.__xor__(other).__len__() == 0
  60. def isdisjoint(self, other):
  61. return self.__and__(other).__len__() == 0
  62. def issubset(self, other):
  63. return self.__sub__(other).__len__() == 0
  64. def issuperset(self, other):
  65. return other.__sub__(self).__len__() == 0
  66. def __contains__(self, elem):
  67. return elem in self._a
  68. def __repr__(self):
  69. if len(self) == 0:
  70. return 'set()'
  71. return '{'+ ', '.join([repr(i) for i in self._a.keys()]) + '}'
  72. def __iter__(self):
  73. return iter(self._a.keys())