美文网首页
数据结构

数据结构

作者: Noza_ea8f | 来源:发表于2022-06-22 09:21 被阅读0次

    简单的数据结构就是列表了;
    把数据放在一个列表里,需要的时候就取出来;
    但有时候事情并不就是这么简单;

    ls1 = ['a1', '0001', '张三', {'语文': 60}, {'数学': 70}, {'英语': 80}]
    ls2 = ['a2', '0002', '李四', {'语文': 61}, {'数学': 71}, {'化学': 81}]
    ls3 = ['a3', '0003', 'a3', {'语文': 61}, {'英语': 71}, {'化学': 81}]
    

    我要把ls3中的字符a全部替换为b怎么办?

    如果列表中的元素都是字符可以用下面的方法

    ls = ['a3', '0003', 'a3']
    ls = [x.replace('a', 'b') for x in ls]
    print(ls)
    

    输出:

    ['b3', '0003', 'b3']
    

    但如果如ls3那样,里面含有其他类型的数据就会报错
    这时候该怎么办呢?
    python有高阶函数map,可以研究一下;
    map函数我理解就是传入一个函数和列表参数,然后对用这个函数对列表中的每一个元素进行处理,之后返回处理的结果;
    那么针对ls3,我这样来设计;
    我只需要考虑针对一个元素的处理

    def func(x):
        # 判断数据类型
        if type(x) is str:
            return x.replace('a', 'b')
        elif type(x) is dict:
            return x
    
    
    ls3 = list(map(func, ls3))
    
    print(ls3)
    

    输出:

    ['b3', '0003', 'b3', {'语文': 61}, {'英语': 71}, {'化学': 81}]
    

    这么看map函数的实质就是通过传入处理函数,方便处理列表中每一个元素;

    下面我想要获得列表中所有课程的信息,这似乎就简单了

    首先我考虑通过列表切片先拿到总的课程信息,注意列表是前闭后开

    class_all = ls3[3:]
    print(class_all)
    

    输出:

    [{'语文': 61}, {'英语': 71}, {'化学': 81}]
    

    然后再把信息逐一遍历出来

    for class_info in class_all:
        print(class_info)
        # 打印字典键值对,也就是分别打印科目名称和成绩
        for key, val in class_info.items():
            print(key, val)
    

    输出:

    {'语文': 61}
    语文 61
    {'英语': 71}
    英语 71
    {'化学': 81}
    化学 81
    

    这里不得不说一下filter函数;

    在某些情况下它能够做与map相同的工作;
    但是二者又存在区别;
    map是对列表中的每个元素进行加工并返回这个列表;
    filter可以过滤掉满足条件的元素;

    如果我要过滤掉列表中成绩低于70的项,应该怎么做呢?

    def f(x):
        if type(x) is dict:
            # 取出字典第一个元素进行判断
            if list(x.values())[0] > 70:
                return x
    
    
    print(list(filter(f, ls3)))
    

    输出:

    [{'英语': 71}, {'化学': 81}]
    

    相关文章

      网友评论

          本文标题:数据结构

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