Un porting della struttura dati set per pys60
1 class Set:
2
3 def __init__(self, iterable = []):
4 self.__elements = self._set(iterable)
5 self.__index = -1
6
7 def _set(self, iterable):
8 s = []
9 for e in iterable:
10 if e not in s: s.append(e)
11 s.sort()
12 return s
13
14 def __contains__(self, element):
15 return (element in self.__elements)
16
17 def __iter__(self):
18 self.__index = -1
19 return self
20
21 def next(self):
22 self.__index += 1
23 try: return self.__elements[self.__index]
24 except: raise StopIteration
25
26 def __or__(self, aSet):
27 if isinstance(aSet,Set):
28 return Set(self.__elements + [e for e in aSet])
29 else: raise TypeError
30
31 def __and__(self, aSet):
32 if isinstance(aSet, Set):
33 return Set([e for e in self.__elements if e in aSet])
34 else: raise TypeError
35
36 def __sub__(self, aSet):
37 if isinstance(aSet, Set):
38 return Set([e for e in self.__elements if e not in aSet])
39 else: raise TypeError
40
41 def __xor__(self, aSet):
42 if isinstance(aSet, Set):
43 return (self-aSet)|(aSet-self)
44 else: raise TypeError
45
46 def __str__(self):
47 return "Set%s" % str(tuple(self.__elements))
48
49 if __name__ == "__main__":
50 a = Set([1,2,3,2,5,1,5,5,1,69,3,5,1,5,1,3])
51 b = Set([2,8,6,82,4,8,69,5,1])
52
53 print "a = %s" % str(a)
54 print "b = %s" % str(b)
55 print "a | b = %s" % str(a|b)
56 print "a & b = %s" % str(a&b)
57 print "a - b = %s" % str(a-b)
58 print "a ^ b = %s" % str(a^b)