Skip to content

Commit 3231194

Browse files
committed
initial commit
0 parents  commit 3231194

File tree

10 files changed

+860
-0
lines changed

10 files changed

+860
-0
lines changed

.gitignore

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
*.py[cod]
2+
3+
# C extensions
4+
*.so
5+
6+
# Packages
7+
*.egg
8+
*.egg-info
9+
dist
10+
build
11+
eggs
12+
parts
13+
bin
14+
var
15+
sdist
16+
develop-eggs
17+
.installed.cfg
18+
lib
19+
lib64
20+
21+
# Installer logs
22+
pip-log.txt
23+
24+
# Unit test / coverage reports
25+
.coverage
26+
.tox
27+
nosetests.xml
28+
29+
#Translations
30+
*.mo
31+
32+
#Mr Developer
33+
.mr.developer.cfg
34+
35+
.DS_Store

misc/iter_survey.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
class IterTest(object):
2+
def __init__(self, data):
3+
self._data = data
4+
self._count = 0
5+
6+
def __iter__(self):
7+
return self
8+
9+
def next(self):
10+
if self._count == len(self._data):
11+
raise StopIteration
12+
else:
13+
output = self._data[self._count]
14+
self._count += 1
15+
return output
16+
17+
class GenTest(object):
18+
def __init__(self, data):
19+
self._data = data
20+
21+
def gen(self):
22+
count = 0
23+
while count < len(self._data):
24+
count += 1
25+
yield self._data[count - 1]
26+
27+
class IterableTest(object):
28+
def __init__(self, data):
29+
self._data = data
30+
31+
def __iter__(self):
32+
return self.iterall()
33+
34+
def iterall(self):
35+
count = 0
36+
while count < len(self._data):
37+
count += 1
38+
yield self._data[count - 1]
39+
40+
41+
42+
if __name__ == '__main__':
43+
L = [1,2,3,4,5]
44+
i = iter(L)
45+
print i
46+
D = {'a':1, 'b':2, 'c':3}
47+
print D.iteritems()
48+
print D.iterkeys()
49+
print D.itervalues()
50+
for li in i:
51+
print li
52+
d = GenTest([1,2,3,4,5])
53+
g = d.gen()
54+
print g
55+
print g.next()
56+
for dat in g:
57+
print dat
58+
g2 = d.gen()
59+
print g2.next()
60+
d2 = IterTest("abcd")
61+
I = iter(d2)
62+
print I
63+
for char in I:
64+
print char
65+
d3 = IterableTest([4,3,2,1])
66+
I2 = iter(d3)
67+
print I2
68+
for dat in I2:
69+
print dat
70+
print d3
71+
for dat in d3:
72+
print dat
73+
for dat in d3:
74+
print dat

unit1/array.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from exceptions import IndexError
2+
# fixed-size array
3+
class Array(object):
4+
5+
# baseIndex is for the lower bound of the array
6+
def __init__(self, length = 0, baseIndex = 0):
7+
assert length >= 0
8+
self._data = [None for i in xrange(length)]
9+
self._baseIndex = baseIndex
10+
11+
def __copy__(self):
12+
tmp = Array(len(self._data))
13+
for i, datum in enumerate(self._data):
14+
tmp._data[i] = datum
15+
tmp._baseIndex = self._baseIndex
16+
return tmp
17+
18+
# get the correct offset from the index input
19+
# return IndexError if the index is out of range
20+
def getOffset(self, index):
21+
offset = index - self._baseIndex
22+
if offset >= 0 and offset < len(self._data):
23+
return offset
24+
else:
25+
raise IndexError
26+
27+
def __getitem__(self, index):
28+
return self._data[self.getOffset(index)]
29+
30+
def __setitem__(self, index, value):
31+
self._data[self.getOffset(index)] = value
32+
33+
def getData(self):
34+
return self._data
35+
36+
data = property(
37+
fget = lambda self: self.getData()
38+
)
39+
40+
def getBaseIndex(self):
41+
return self._baseIndex
42+
43+
def setBaseIndex(self, baseIndex):
44+
self._baseIndex = baseIndex
45+
46+
baseIndex = property(
47+
fget = lambda self: self.getBaseIndex(),
48+
fset = lambda self, value: self.setBaseIndex(value)
49+
)
50+
51+
def __len__(self):
52+
return len(self._data)
53+
54+
def setLength(self, value):
55+
if value > len(self._data):
56+
for i in xrange(value - len(self._data)):
57+
self._data.append(None)
58+
else:
59+
tmp = [None for i in xrange(value)]
60+
self._data = tmp
61+
62+
length = property(
63+
fget = lambda self: self.__len__(),
64+
fset = lambda self, value: self.setLength(value)
65+
)

unit1/linkedlist.py

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
from exceptions import RuntimeError
2+
3+
class LinkedList(object):
4+
5+
class Element(object):
6+
7+
def __init__(self, list, value, next=None):
8+
self._list = list
9+
self._value = value
10+
self._next = next
11+
12+
def getValue(self):
13+
return self._value
14+
15+
value = property(
16+
fget = lambda self: self.getValue()
17+
)
18+
19+
def getNext(self):
20+
return self._next
21+
22+
next = property(
23+
fget = lambda self: self.getNext()
24+
)
25+
26+
def insertAfter(self, item):
27+
elt = LinkedList.Element(self._list, item, self._next)
28+
self._next = elt
29+
if self == self._list._tail:
30+
self._list._tail = elt
31+
32+
def insertBefore(self, item):
33+
elt = LinkedList.Element(self._list, item, self)
34+
if self._list._head == self:
35+
self._list._head = elt
36+
else:
37+
prev = self._list._head
38+
while prev._next != None and prev._next != self:
39+
prev = prev._next
40+
prev._next = elt
41+
42+
# Linked list methods
43+
def __init__(self):
44+
self._head = None
45+
self._tail = None
46+
47+
def purge(self):
48+
self._head = None
49+
self._tail = None
50+
51+
def getHead(self):
52+
return self._head
53+
54+
head = property(
55+
fget = lambda self: self.getHead()
56+
)
57+
58+
def getTail(self):
59+
return self._tail
60+
61+
tail = property(
62+
fget = lambda self: self.getTail()
63+
)
64+
65+
def getIsEmpty(self):
66+
return self._head == None
67+
68+
isEmpty = property(
69+
fget = lambda self: self.getIsEmpty()
70+
)
71+
72+
# accessors for 1st and last list element
73+
def getFirst(self):
74+
if self._head == None:
75+
raise RuntimeError
76+
return self._head._value
77+
78+
first = property(
79+
fget = lambda self: self.getFirst()
80+
)
81+
82+
def getLast(self):
83+
if self._tail == None:
84+
raise RuntimeError
85+
return self._tail._value
86+
87+
last = property(
88+
fget = lambda self: self.getLast()
89+
)
90+
91+
def prepend(self, item):
92+
elt = self.Element(self, item, self._head)
93+
self._head = elt
94+
if self._tail == None:
95+
self._tail = elt
96+
97+
def append(self, item):
98+
elt = self.Element(self, item, self._tail)
99+
if self._head != None:
100+
self._tail._next = elt
101+
else:
102+
self._head = elt
103+
self._tail = elt
104+
105+
def __copy__(self):
106+
tmp = LinkedList()
107+
ptr = self._head
108+
while ptr != None:
109+
tmp.append(ptr._value)
110+
ptr = ptr._next
111+
return tmp
112+
113+
def extract(self, value):
114+
ptr = self._head
115+
prev = None
116+
while ptr != None and ptr._value != value:
117+
prev = ptr
118+
ptr = ptr._next
119+
if ptr == None:
120+
raise KeyError
121+
if ptr == self._head:
122+
self._head = None
123+
else:
124+
prev._next = ptr._next
125+
if ptr == self._tail:
126+
self._tail = prev

0 commit comments

Comments
 (0)