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

数据结构和算法复习

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','[email protected]','110-120-130','13873756585')
name,emile,*phone_numbers = record              # 将提取出的数据作为一个列表
'''
在函数参数的传递中的带* 和 ** 的参数是将输入的引用作成
一个元组和字典
'''
print(name,'\t',emile,'\t',phone_numbers)
sura     [email protected]    ['110-120-130', '13873756585']

author:sura
date:2018.11.4

你可能感兴趣的:(数据结构和算法#温故而知新)