Google Code Basic Python List2.py

Did it. I keep wondering if I’ve not done the assignment correctly.

#!/usr/bin/python -tt
 # Copyright 2010 Google Inc.
 # Licensed under the Apache License, Version 2.0
 # http://www.apache.org/licenses/LICENSE-2.0
# Google's Python Class
 # http://code.google.com/edu/languages/google-python-class/
# Additional basic list exercises
# D. Given a list of numbers, return a list where
 # all adjacent == elements have been reduced to a single element,
 # so [1, 2, 2, 3] returns [1, 2, 3]. You may create a new list or
 # modify the passed in list.
 def remove_adjacent(nums):
 nums = list(set(nums))
 return nums
# E. Given two lists sorted in increasing order, create and return a merged
 # list of all the elements in sorted order. You may modify the passed in lists.
 # Ideally, the solution should work in "linear" time, making a single
 # pass of both lists.
 def linear_merge(list1, list2):
 finalist = list1 + list2
 finalist.sort()
 return finalist
# Note: the solution above is kind of cute, but unforunately list.pop(0)
 # is not constant time with the standard python list implementation, so
 # the above is not strictly linear time.
 # An alternate approach uses pop(-1) to remove the endmost elements
 # from each list, building a solution list which is backwards.
 # Then use reversed() to put the result back in the correct order. That
 # solution works in linear time, but is more ugly.
# Simple provided test() function used in main() to print
 # what each function returns vs. what it's supposed to return.
 def test(got, expected):
 if got == expected:
 prefix = ' OK '
 else:
 prefix = ' X '
 print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected))
# Calls the above functions with interesting inputs.
 def main():
 print 'remove_adjacent'
 test(remove_adjacent([1, 2, 2, 3]), [1, 2, 3])
 test(remove_adjacent([2, 2, 3, 3, 3]), [2, 3])
 test(remove_adjacent([]), [])
print
 print 'linear_merge'
 test(linear_merge(['aa', 'xx', 'zz'], ['bb', 'cc']),
 ['aa', 'bb', 'cc', 'xx', 'zz'])
 test(linear_merge(['aa', 'xx'], ['bb', 'cc', 'zz']),
 ['aa', 'bb', 'cc', 'xx', 'zz'])
 test(linear_merge(['aa', 'aa'], ['aa', 'bb', 'bb']),
 ['aa', 'aa', 'aa', 'bb', 'bb'])
if __name__ == '__main__':
 main()
Advertisements

One thought on “Google Code Basic Python List2.py

  1. Your solution for D is impressively done in two lines! However, as per the instructions, it would not always work as it says that only adjacent number should be removed. Sets basically give you unique numbers in a list. So, if there are repeating numbers in the list and are not adjacent, your solution will not work. E.g. [2,3,4,4,5,6,4] should yield [2,3,4,5,6,4] as per the instructions. Your solution would yield [2,3,4,5,6], which is incorrect.
    Here’s how managed to do it-

    def remove_adjacent(nums):

    adjList = []
    for i in range(0,len(nums)):
    adjList.append(nums[i])
    for i in range(1,len(adjList)):
    if adjList[i] == adjList[i-1]:
    adjList.pop(i)

    return(adjList)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s