# HG changeset patch # User Paul Boddie # Date 1491258488 -7200 # Node ID 154d95f9de554d96fe2957b84b98205f1f4a41c1 # Parent 786ddedfee6710e52c7a473e8738b8124a5c6367 Added insert and reverse methods to the list implementation. diff -r 786ddedfee67 -r 154d95f9de55 lib/__builtins__/list.py --- a/lib/__builtins__/list.py Tue Apr 04 00:27:38 2017 +0200 +++ b/lib/__builtins__/list.py Tue Apr 04 00:28:08 2017 +0200 @@ -65,7 +65,27 @@ list_append(self, value) - def insert(self, i, value): pass + def insert(self, index, value): + + "Insert at 'index' the given 'value'." + + length = self.__len__() + index = _get_absolute_index(index, length) + + if index == length: + self.append(value) + return + elif index > length: + raise IndexError, index + + i = length - 1 + self.append(self.__getitem__(i)) + + while i > index: + self.__setitem__(i, self.__getitem__(i - 1)) + i -= 1 + + self.__setitem__(index, value) def extend(self, iterable): @@ -85,7 +105,20 @@ list_setsize(self.__data__, self.__len__() - 1) return i - def reverse(self): pass + def reverse(self): + + "Reverse the list in-place." + + length = self.__len__() + i = 0 + j = length - 1 + + while i < j: + item = self.__getitem__(j) + self.__setitem__(j, self.__getitem__(i)) + self.__setitem__(i, item) + i += 1 + j -= 1 def sort(self, cmp=None, key=None, reverse=0): pass diff -r 786ddedfee67 -r 154d95f9de55 tests/list.py --- a/tests/list.py Tue Apr 04 00:27:38 2017 +0200 +++ b/tests/list.py Tue Apr 04 00:28:08 2017 +0200 @@ -70,3 +70,30 @@ d.pop() # should raise an exception except IndexError, exc: print "d.pop(): failed to access item", exc.index + +# Test insertion. + +e = [] + +try: + e.insert(1, 1) # should raise an exception +except IndexError, exc: + print "e.insert(1, 1): failed to insert at index", exc.index + +e.insert(0, 1) +print e # [1] + +try: + e.insert(2, 1) # should raise an exception +except IndexError, exc: + print "e.insert(2, 1): failed to insert at index", exc.index + +e.insert(1, 2) +print e # [1, 2] +e.insert(0, 3) +print e # [3, 1, 2] + +# Test reversal. + +e.reverse() +print e # [2, 1, 3]