cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记

list

Lists are Python data structures that can store multiple values.

list comprehensions

[<expression> for <element> in <sequence> if <conditional>]

The syntax is designed to read like English: “Compute the expression for each element in the sequence if the conditional is true.”

>>> [i**2 for i in [1, 2, 3, 4] if i % 2 == 0]
[4, 16]

It would be like this:

>>> lst = []
>>> for i in [1, 2, 3, 4]:
...     if i % 2 == 0:
...         lst += [i**2]
>>> lst
[4, 16]

Data Abstraction

An abstract data type consists of two types of functions:
Constructors: functions that build the abstract data type.
Selectors: functions that retrieve information from the data type

However, we does not need to know how constructors and selectors are implemented.

Questions

cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第1张图片
cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第2张图片

What would Python display?

cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第3张图片
check the answer:

p1 = [x*x for x in range(5)]
print('p1=',p1)
p2 = [n for n in range(10) if n % 2 == 0]
print('p2=',p2)
ones = [1 for i in ["hi", "bye", "you"]]
print('ones=',ones)
p3 = ones + [str(i) for i in [6, 3, 8, 4]]
print('ones_again=',ones)
print('p3=', p3)
p4 = [i+5 for i in [n for n in range(1,4)]]
print('p4=',p4)

https://goo.gl/VWoyEJ
cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第4张图片

p5 = [i**2 for i in range(10) if i<3]
print("p5=",p5)
lst = ['hi' for i in [1,2,3]]
print(lst)
p6 = lst + [i for i in ['1', '2', '3']]
print('p6=',p6)

https://goo.gl/aZf4Rg
cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第5张图片

If This Not That

cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第6张图片

def if_this_not_that(i_list, this):
    """Define a function which takes a list of integers `i_list` and an integer
    `this`. For each element in `i_list`, print the element if it is larger
    than `this`; otherwise, print the word "that".

    >>> original_list = [1, 2, 3, 4, 5]
    >>> if_this_not_that(original_list, 3)
    that
    that
    that
    4
    5
    """

    for n in i_list:
        if n <= this:
            print("that")
        else:
            print(n)



from doctest import run_docstring_examples
run_docstring_examples(if_this_not_that, globals(), True)

lst = [1, 2, 3, 4, 5, 3, 6, 1, 2, 7, 9]
if_this_not_that(lst, 5)

cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第7张图片

City Data Abstraction

Q4 distance

from math import sqrt
def distance(city1, city2):
    """
    >>> city1 = make_city('city1', 0, 1)
    >>> city2 = make_city('city2', 0, 2)
    >>> distance(city1, city2)
    1.0
    >>> city3 = make_city('city3', 6.5, 12)
    >>> city4 = make_city('city4', 2.5, 15)
    >>> distance(city3, city4)
    5.0
    """
    city1_lat = city1.get_lat(city1)
    city1_lon = city1.get_lon(city1)
    city2_lat = city2.get_lat(city2)
    city2_lon = city.get_lon(city2)
    return sqrt((city2_lat-city1_lat)**2+(city2_lon-city1_lon)**2)

Q5 Closer city

def closer_city(lat, lon, city1, city2):
    """
    Returns the name of either city1 or city2, whichever is closest to
    coordinate (lat, lon).

    >>> berkeley = make_city('Berkeley', 37.87, 112.26)
    >>> stanford = make_city('Stanford', 34.05, 118.25)
    >>> closer_city(38.33, 121.44, berkeley, stanford)
    'Stanford'
    >>> bucharest = make_city('Bucharest', 44.43, 26.10)
    >>> vienna = make_city('Vienna', 48.20, 16.37)
    >>> closer_city(41.29, 174.78, bucharest, vienna)
    'Bucharest'
    """
    city3 = make_city('city3', lat,lon)
    if distance(city1,city3)return "city1"
    else:
        return "city2"

Q7: Flatten

Write a function flatten that takes a (possibly deep) list and “flattens” it.

def flatten(lst):
    """Returns a flattened version of lst.

    >>> flatten([1, 2, 3])     # normal list
    [1, 2, 3]
    >>> x = [1, [2, 3], 4]      # deep list
    >>> flatten(x)
    [1, 2, 3, 4]
    >>> x = [[1, [1, 1]], 1, [1, 1]] # deep list
    >>> flatten(x)
    [1, 1, 1, 1, 1, 1]
    """
    "*** YOUR CODE HERE ***"

Reference

a = [1,[2,3],[1,[3,[5]]]]

def flatten(lst):
    templst = list()
    for x in lst:
        if type(x) != list:
            templst.append(x)
        else:
            lstterm = flatten(x)
            templst.extend(lstterm)
    return templst

b = flatten(a)
print(b)

https://goo.gl/fnxCw3
cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第8张图片

Q8: Merge

Write a function merge that takes 2 sorted lists lst1 and lst2, and returns a new list that contains all the elements in the two lists in sorted order.

def merge(lst1, lst2):
    """Merges two sorted lists.

    >>> merge([1, 3, 5], [2, 4, 6])
    [1, 2, 3, 4, 5, 6]
    >>> merge([], [2, 4, 6])
    [2, 4, 6]
    >>> merge([1, 2, 3], [])
    [1, 2, 3]
    >>> merge([5, 7], [2, 4, 6])
    [2, 4, 5, 6, 7]
    """
    "*** YOUR CODE HERE ***"

Reference

def merge(lst1, lst2):
    """Merges two sorted lists.

    >>> merge([1, 3, 5], [2, 4, 6])
    [1, 2, 3, 4, 5, 6]
    >>> merge([], [2, 4, 6])
    [2, 4, 6]
    >>> merge([1, 2, 3], [])
    [1, 2, 3]
    >>> merge([5, 7], [2, 4, 6])
    [2, 4, 5, 6, 7]
    """

    lst3 = lst1 +lst2
    lst3.sort()
    return lst3


from doctest import run_docstring_examples
run_docstring_examples(merge, globals(), True)

cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记_第9张图片


Lab 4: Lists and Data Abstraction https://inst.eecs.berkeley.edu/~cs61a/sp18/lab/lab04/

转载于:https://www.cnblogs.com/siucaan/p/9623170.html

你可能感兴趣的:(cs61a 2018 spring Lab4 Lists and Data Abstraction 笔记)