fork download
  1. class bloom:
  2. def __init__(self):
  3. self.__data = 0
  4.  
  5. def add(self, element):
  6. self.__data |= element
  7.  
  8. def possibly_contains(self, element):
  9. return bool(self.__data & element)
  10.  
  11. class uniquelist:
  12. def __init__(self):
  13. self.__index = bloom()
  14. self.__elements = []
  15.  
  16. def append(self, element):
  17. if element in self:
  18. return
  19. self.__index.add(hash(element))
  20. self.__elements.append(element)
  21.  
  22. def extend(self, elements):
  23. for element in elements:
  24. self.append(element)
  25.  
  26. def __contains__(self, element):
  27. if self.__index.possibly_contains(hash(element)):
  28. return element in self.__elements
  29. return False
  30.  
  31. def __len__(self):
  32. return len(self.__elements)
  33.  
  34. def __iter__(self):
  35. return iter(self.__elements)
  36.  
  37. xs = uniquelist()
  38. xs.append(1)
  39. xs.append(2)
  40. xs.append(3)
  41. xs.append(3)
  42. xs.append(4)
  43. for x in xs:
  44. print(x)
Success #stdin #stdout 0.02s 8736KB
stdin
Standard input is empty
stdout
1
2
3
4