Skip to content

Commit 424f6df

Browse files
committed
set
1 parent c796d1b commit 424f6df

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

ehco/set/__init__.py

Whitespace-only changes.

ehco/set/set.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from ehco.hashtable.hashtable_adt import HashTable
2+
3+
4+
class Set(HashTable):
5+
6+
def add(self, key):
7+
return super(Set, self).add(key, True)
8+
9+
def remove(self, key):
10+
super(Set, self).remove(key)
11+
12+
def pop(self):
13+
if len(self) == 0:
14+
raise Exception('pop from emepty set')
15+
key = list(self)[-1]
16+
super(Set, self).remove(key)
17+
return key
18+
19+
def __and__(self, other_set):
20+
'''取交集'''
21+
new_set = Set()
22+
for ele_a in self:
23+
if ele_a in other_set:
24+
new_set.add(ele_a)
25+
return new_set
26+
27+
def __sub__(self, other_set):
28+
'''取差集'''
29+
new_set = Set()
30+
for ele_a in self:
31+
if ele_a not in other_set:
32+
new_set.add(ele_a)
33+
return new_set
34+
35+
def __or__(self, other_set):
36+
'''取并集'''
37+
new_set = Set()
38+
for ele_a in self:
39+
new_set.add(ele_a)
40+
for ele_b in other_set:
41+
new_set.add(ele_b)
42+
return new_set
43+
44+
def __xor__(self, other_set):
45+
'''取对称差'''
46+
new_set = (self | other_set) - (self & other_set)
47+
return new_set
48+
49+
50+
def test_set():
51+
s1 = Set()
52+
s1.add(1)
53+
s1.add(2)
54+
s1.add(3)
55+
assert 1 in s1
56+
57+
s1.add(1)
58+
assert len(s1) == 3
59+
60+
s2 = Set()
61+
s2.add(3)
62+
s2.add(4)
63+
s2.add(5)
64+
65+
assert sorted(list(s1 & s2)) == [3]
66+
assert sorted(list(s1 - s2)) == [1, 2]
67+
assert sorted(list(s1 | s2)) == [1, 2, 3, 4, 5]
68+
assert sorted(list(s1 ^ s2)) == [1, 2, 4, 5]
69+
70+
assert s1.remove(1) is True
71+
assert s1.remove(5) is False

0 commit comments

Comments
 (0)