• 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

    p1
    p2

    What would Python display?

    p3
    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
    p4

    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
    p5

    If This Not That

    p6

    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)

    p7

    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)<distance(city2,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
    2018060809245396

    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)

    20180608095448659


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

  • 相关阅读:
    扫描线算法
    评论备份(3)
    评论备份(2)
    二分法的注意事项
    sam模板
    Machine Learning(Andrew Ng)学习笔记
    洛谷P2221 [HAOI2012]高速公路
    洛谷P3233 [HNOI2014]世界树
    P2515 [HAOI2010]软件安装
    BZOJ4293: [PA2015]Siano
  • 原文地址:https://www.cnblogs.com/siucaan/p/9623170.html
Copyright © 2020-2023  润新知