美文网首页
数据结构和算法#温故而知新

数据结构和算法#温故而知新

作者: 罗泽坤 | 来源:发表于2018-11-04 23:47 被阅读0次

    数据结构和算法复习

    1.1 将序列分解为单独的变量

    问题:一个包含N个元素的元组或序列,将他分解为N个单独的变量

    1.1.2 解决方案

    • 任何序列都可以通过一个简单的赋值操作来分解为单独的变量。唯一要求是变量的总数和结构与序列吻合实例如下
    a = (5,6)
    x,y = a
    print(x)
    print(y)
    
    5
    6
    
    data = ['python',5,2,0,(2018,11,4)]
    x,y,z,k,j = data
    (i,n,m) = j
    print(x)
    print(i)
    
    python
    2018
    
    # 通过for循环提取
    for x in data:
        print(x)
    
    python
    5
    2
    0
    (2018, 11, 4)
    
    # 不仅仅元组或列表只要是可迭代对象都可以分解提取
    a = 'python'
    x,y,z,i,n,m = a
    print(x,'\t',y,'\t',z,'\t',i,'\t',n,'\t',m)
    
    p    y   t   h   o   n
    

    1.2 从任意长度的可迭代对象中分解元素

    1.2.1 问题:

    需要从某个可迭代对象中分解出N个元素,但是这个可迭代对象的长度可能超过N
    这会导致出现‘too many values to unpack’的异常

    1.2.2 解决方案

    python的‘表达式’可以用来解决这个问题,例如,假设开设了一门课程,
    并且决定在成绩中去掉第一个和最后一个值对中间剩下的成绩做平均分统计,
    如果只有6个成绩可以将6个都分解出来,但是有100个嘞?
    表达式可以解决问题

    a = list(range(100))#假设有一百个同学的成绩
    a[11] = 200
    a[30] = 0
    a[0] = 300          #手动赋值打乱顺序
    
    for x in a:
        print(x,'\t',end ='')
    
    300     1   2   3   4   5   6   7   8   9   10  200     12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  0   31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  
    
    grades = sorted(a)      #先排序
    for x in grades:
        print(x,'\t',end = '')
    
    0   1   2   3   4   5   6   7   8   9   10  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  200     300     
    
    import math
    def drop_last_first(grade):
        first,*b,last = grade
        print(sum(b)/len(b))  
    drop_last_first(grades)    
    
    52.13265306122449
    
    '''
    另外一个问题是假设有用户记录,记录由姓名和电子邮件地址组成,
    后面跟任意数量的电话号码。分解记录如下
    '''
    record = ('sura','517926120@qq.com','110-120-130','13873756585')
    name,emile,*phone_numbers = record              # 将提取出的数据作为一个列表
    '''
    在函数参数的传递中的带* 和 ** 的参数是将输入的引用作成
    一个元组和字典
    '''
    print(name,'\t',emile,'\t',phone_numbers)
    
    sura     517926120@qq.com    ['110-120-130', '13873756585']
    

    author:sura
    date:2018.11.4

    相关文章

      网友评论

          本文标题:数据结构和算法#温故而知新

          本文链接:https://www.haomeiwen.com/subject/kycjxqtx.html