# Sample Python Exam Problem Solutions

Problem: You are given a special type of List called mylist that has only a subset of functionality of Python lists. It provides the following methods:

- mylist(): creates an empty mylist object
- L.append(item): returns a new mylist that contains all the elements of L followed by item. Note that L is not modified.
- L.pop(): returns a new mylist object containing all the elements of mylist L in the same order, except the last one. Note that L is not modified. L assumed to be non-empty.
- L.last(): returns the last element of L. L assumed to be non-empty.
- L[index1:index2]: returns a new mylist that contains elements from position index1 to index2-1 (inclusive). Indexing starts at 0.
- L.isempty(): returns True if L is empty object. Else it returns False.

Some examples:

- mylist().append(4).append(3).last(): same as 3
- mylist().append(4).append(3).pop(): same as mylist().append(4)
- mylist().append(4).isempty(): False
- mylist().append(4).pop().isempty(): True

Here is where you can find an implementation of the above list (save both files in the same folder. Sample.py contains an example use. MYLIST.py contains the implementation above, except for the indexing function. You can do all the problems without indexing operation):

- https://wiki.eecs.umich.edu/global/data/eecs182/images/8/8d/Sample.py
- https://wiki.eecs.umich.edu/global/data/eecs182/images/a/a6/MYLIST.py

Given the above mylist type, implement the following functions only using the above interface to mylist.

C. lookup(L, k): return the kth item in the mylist, where indexing starts at 0.

D. concat(L1, L2): returns a mylist that is a concatenation of L1 and L2.

E. insert_first(item, L): returns a mylist that contains item followed by items in L, in sequence.

F. len(L): returns the number of objects in mylist.

All the methods are non-destructive, in the sense that the parameter L need not be modified.