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/

  • 相关阅读:
    chrome浏览器中安装以及使用Elasticsearch head 插件
    windows10 升级并安装配置 jmeter5.3
    linux下部署Elasticsearch6.8.1版本的集群
    【Rollo的Python之路】Python 爬虫系统学习 (八) logging模块的使用
    【Rollo的Python之路】Python 爬虫系统学习 (七) Scrapy初识
    【Rollo的Python之路】Python 爬虫系统学习 (六) Selenium 模拟登录
    【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium
    【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习
    【Rollo的Python之路】Python 爬虫系统学习 (三)
    【Rollo的Python之路】Python sys argv[] 函数用法笔记
  • 原文地址:https://www.cnblogs.com/siucaan/p/9623170.html
Copyright © 2011-2022 走看看