1
2
3
4
5
6
8 """A set abstraction supporting the basic set operations.
9
10 This implementation requires that all elements are hashable,
11 which implies that elements must not mutate while contained.
12 """
14 """Initializes a new HashSet."""
15 self.__elements = {}
16 for e in elements:
17 self.__elements[e] = 1
18
20 """Returns true iff this set contains element."""
21 return element in self.__elements
22
24 """Returns true iff x == y for all elements in self, set."""
25 if not isinstance(set, HashSet):
26 return 0
27 for x in self.list():
28 if not (x in set): return 0
29 for x in set.list():
30 if not (x in self): return 0
31 return 1
32
34 """Returns the number of elements in this set."""
35 return len(self.__elements)
36
38 """Returns true iff this set is not equal to set."""
39 return not self.__eq__(set)
40
42 """Returns a debugging string representation of this set."""
43 return "HashSet(" + repr(self.list()) + ")"
44
46 """Returns a string representation of this set."""
47 return "{" + ",".join(map(str, self.list())) + "}"
48
49
50
51 - def add(self, element):
52 """Adds element to this set."""
53 self.__elements[element] = 1
54
58
60 """Removes element from this set."""
61 try:
62 del self.__elements[element]
63 except KeyError:
64 pass
65
67 """Returns the elements of this set in a list."""
68 return self.__elements.keys()
69
70
71
73 """Returns true iff this set is empty."""
74 return len(self.__elements) == 0
75
76
77
79 """Returns the union of this set and s."""
80 return HashSet(self.list() + s.list())
81
83 """Returns the intersection of this set and s."""
84 return HashSet(filter(lambda e,s=s: e in s, self.list()))
85
87 """Returns the difference of this set and s."""
88 return HashSet(filter(lambda e,s=s: e not in s, self.list()))
89
91 """Returns the Cartesian product of this set and s."""
92 p = []
93 for i in self.list():
94 for j in s.list():
95 p.append((i,j))
96 return HashSet(p)
97