zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    IIS负载均衡Application Request Route详解第二篇:创建与配置Server Farm
    负载均衡原理与实践详解 第一篇(重新整理)
    负载均衡原理剖析与实践第一篇介绍篇
    查询优化器内核剖析第八篇:执行引擎之数据访问操作Seek(上)
    提高ASP.NET性能与可伸缩性的几个个常用方法剖析
    IIS负载均衡Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)
    负载均衡第二篇负载均衡基础知识普及
    查询优化器内核剖析第七篇:执行引擎之数据访问操作Scan
    活在当下:人这一辈子,你总的坚持点什么
    LINQ 的演变及其对 C# 设计的影响
  • 原文地址:https://www.cnblogs.com/siucaan/p/9623170.html
Copyright © 2011-2022 走看看