Class 14 - Worksheet
Upcoming Schedule
Since we didn't get as far in class as expect, Project 3 is extended to Monday, 29 February. Before submitting Project 3 you must have complete the Orange Belt (either by getting a "Gold star" on Project 2 or completing the promotion requirements from Class 13 notes.
Slides
Nested Lists
def list_copy(lst):
"""Returns a shallow copy of the input lst."""
if not lst:
return []
else:
return [lst[0]] + list_copy(lst[1:])
def is_list(obj):
"""Returns True iff obj is a list."""
return isinstance(obj, list)
def list_deep_copy(lst):
"""Returns a deep copy of the input list."""
if not lst:
return []
elif is_list(lst[0]):
return [list_deep_copy(lst[0])] + list_deep_copy(lst[1:])
else:
return [lst[0]] + list_deep_copy(lst[1:])
Demonstrate the difference between list_copy and list_deep_copy with some Python code that shows how they behave differently.
def list_deep_map(fn, lst):
"""
Returns a new list with the same structure as lst, but with each element
replaced by the result of applying fn to that element.
"""
if not lst:
return []
elif is_list(lst[0]):
# finish this code
#
else:
#
#
def list_accumulate(fn, lst, start):
def list_sum(lst):
def
#
return list_accumulate(_______________________, lst, ____)
def list_length(lst):
def
#
return list_accumulate(_______________________, lst, ____)
def list_and(lst):
def list_or(lst):
def list_biggest(lst):
def list_deep_accumulate(lst, fn, base):