• 面试题总结


    一:通过sorted函数或者列表的sort函数和lambda表达式对下列列表按score排序

      list_a = [
    
        {"name":"p1","sore":100},
        {"name":"p2","sore":10},
        {"name":"p3","sore":30},
        {"name":"p4","sore":20},
        {"name":"p5","sore":80},
        {"name":"p6","sore":70},
        {"name":"p7","sore":60},
        {"name":"p8","sore":40},
        ]
     答案:
      list_a = [
    
        {"name":"p1","sore":100},
        {"name":"p2","sore":10},
        {"name":"p3","sore":30},
        {"name":"p4","sore":20},
        {"name":"p5","sore":80},
        {"name":"p6","sore":70},
        {"name":"p7","sore":60},
        {"name":"p8","sore":40},
        ];
    list_a.sort(function(a,b){
    
            return a.sore-b.sore;
    });
    
    console.log(list_a)
    
    显示答案:
    1. 0: {name: "p2", sore: 10}
    2. 1: {name: "p4", sore: 20}
    3. 2: {name: "p3", sore: 30}
    4. 3: {name: "p8", sore: 40}
    5. 4: {name: "p7", sore: 60}
    6. 5: {name: "p6", sore: 70}
    7. 6: {name: "p5", sore: 80}
    8. 7: {name: "p1", sore: 100}
    9. length: 8
     

    2:js里面的json字符串和对象互相转换:

    JSON对象
    
    var str1 = '{"name": "chao", "age": 18}';
    var obj1 = {"name": "chao", "age": 18};
    // JSON字符串转换成对象
    var obj = JSON.parse(str1); 
    // 对象转换成JSON字符串
    var str = JSON.stringify(obj1);

    3:下列函数那些传参正确(ABDF)多选题

    def f(a,b,c='1',d='2',*args,**kwargs):
        pass
    
    #A
    f(1,2,)
    #B
    f(b=1,a=2)
    #C
    # f(a=1,2,c=1) #位置参数应遵循关键字传参
    #D
    f(1,2,d=3,f=4)
    #E
    # f(*(1,2),**{'c':1,'d':2,'a':5})#参数a获得了多个值
    #F
    f(*(1,),**{'c':1,'d':2,'b':5})

    4:通过sorted函数或者列表的sort函数和lambda表达式对下列列表按score排序

    '''
    排序函数.
        语法: sorted(Iterable, key=None, reverse=False)
        Iterable: 可迭代对象
        key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每⼀个元素传递给这个函数的参数. 根据函数运算的结果进⾏排序
        reverse: 是否是倒叙. True: 倒叙, False: 正序
    '''
    
    list_a = [
        {"name": "p1", "sore": 100},
        {"name": "p2", "sore": 10},
        {"name": "p3", "sore": 30},
        {"name": "p4", "sore": 20},
        {"name": "p5", "sore": 80},
        {"name": "p6", "sore": 70},
        {"name": "p7", "sore": 60},
        {"name": "p8", "sore": 40},
    ]
    
    print(sorted(list_a,key=lambda e:e["sore"],reverse=True))

    衍生:

    filter()
    '''
    filter()函数 筛选函数 语法: filter(function,Iterable) function: ⽤来筛选的函数. 在filter中会⾃动的把iterable中的元素传递给function. 然后 根据function返回的True或者False来判断是否保留此项数据 Iterable: 可迭代对象 ''' lst = [1,2,3,4,5,6,7] # 筛选偶数出来 lst2=filter(lambda a:a%2==0,lst) # 得到一个对象 print(lst2) # <filter object at 0x0000008FAA1BE828> print(list(lst2))


    配合lamda函数使用filter()
    lst = [{"id":1, "name":'aa', "age":18},
    {"id":2, "name":'bb', "age":16},
    {"id":3, "name":'cc', "age":17}]

    a_lst=filter(lambda e:e["age"],lst) # 得到一个对象
    print(list(a_lst))
    # [{'id': 1, 'name': 'aa', 'age': 18},
    # {'id': 2, 'name': 'bb', 'age': 16},
    # {'id': 3, 'name': 'cc', 'age': 17}]

    map函数:

    '''
    映射函数
     语法: map(function, iterable) 可以对可迭代对象中的每⼀个元素进⾏映射. 分别取执⾏
    function
    '''
    
    def func(e):
        return e * e
    
    mp = map(func, [1, 2, 3, 4, 5, 6])
    
    # 配合lamda函数进行使用
    a_mp=map(lambda e:e*e,mp)
    print(a_mp)  # 对象  <map object at 0x0000006795A6E908>
    bb=list(a_mp)  # [1, 16, 81, 256, 625, 1296]
    print(bb)  # [1, 16, 81, 256, 625, 1296]
    print(bb.reverse())  # f返回None
    print(list(reversed(bb)))   # reversed()将⼀个序列翻转, 返回翻转序列的迭代器 # [1, 16, 81, 256, 625, 1296]
    
    
    # maplamda计算两个列表相同位置的和

    lst1 = [1, 2, 3, 4, 5]
    lst2 = [2, 4, 6, 8, 10]
    lst3=map(lambda x,y:x+y,lst1,lst2)
    print(lst3) # <map object at 0x000000D4D771E898>
    print(list(lst3)) # [3, 6, 9, 12, 15]

    ''' reverse() 函数用于反向列表中元素。 reverse() 该方法没有返回值,但是会对列表的元素进行反向排序。 语法:list.reverse() ''' lit=[2,4,6,7,9] lit.reverse() print(lit) # [9, 7, 6, 4, 2]

    reverse()和reversed()的基本比较

    # lit=[2,4,6,9]
    # print(list(reversed(lit))) # # [9, 6, 4, 2]
    
    lit=[2,4,6,9]
    print(lit.reverse()) # None
    print(lit) # [9, 6, 4, 2]
    
    
    # 总结:
    reversed(可迭代对象) 返回的是一个新的可迭代对象,需要用print(list(reversed(lit)))进行打印出来
    lit.reverse()是在原来的列表上将列表进行反转,不会产生新的列表,所以print(lit.reverse())打印的是一个None

    #递归

    在函数中调⽤函数本⾝. 就是递归 

    def
    fun(n): print(n) n+=1 fun(n) fun(1) 在python中递归的深度最⼤到998 ''' 1 ... 993 994 995 996 997 998 '''

    5:一行代码,通过filter 和 lamdba 函数输出以下列表索引为奇数对应的元素(生成器和列表推导式,配合的例题)

    list_b = [12, 213, 22, 2, 2, 2, 22, 2, 2, 32, ]
    ''''
    分析过程:
    a=enumerate(list_b)
    print(list(a))  # [(0, 12), (1, 213), (2, 22), (3, 2), (4, 2), (5, 2), (6, 22), (7, 2), (8, 2), (9, 32)]
    cc=filter(lambda a:a[0]%2==1,enumerate(list_b)) 
    dd=list(cc)
    print(dd) # [(1, 213), (3, 2), (5, 2), (7, 2), (9, 32)]
    print(type(dd)) #  <class 'list'> 
    print(len(dd))  # 5
    
    '''
    # 配合lambda函数和filter函数进行,还有列表推导式的结果是:
    '''
    列表推导式的常⽤写法:
    [ 结果 for 变量 in 可迭代对象]
    例. 从python1期到python14期写入列表lst:
    lst = ['python%s' % i for i in range(1,15)]
    print(lst)
    
    
    
    ⽣成器表达式和列表推导式的语法基本上是⼀样的. 只是把[]替换成()
    gen = (i for i in range(10))
    print(gen)
    结果:
    <generator object <genexpr> at 0x106768f10>
    '''
    
    new_list = [a[1] for a in filter(lambda a: a[0] % 2 == 1, enumerate(list_b))]
    # print(new_list)

     6:对记录进行去重对mygame 表gname ,userid 相同的记录进行去重例如表中记录如下

    表结构如下:

    CREATE TABLE mygame(
    `id` int(11) NOT NULL  AUTO_INCREMENT,
    `gname` VARCHAR(50) DEFAULT NULL,
    `userid` int(11) DEFAULT NULL,
    `create_datetime` datetime DEFAULT NULL,
    PRIMARY KEY(`id`)
    )ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

    答案:

    mysql> select * from mygame where id in (select max(id) from mygame group by gname) order by id;
    +----+-------+--------+-----------------+
    | id | gname | userid | create_datetime |
    +----+-------+--------+-----------------+
    |  6 | b     | 222222 | NULL            |
    |  7 | c     | 222222 | NULL            |
    |  8 | d     | 111111 | NULL            |
    |  9 | a     | 111111 | NULL            |
    +----+-------+--------+-----------------+
    4 rows in set (0.00 sec)
  • 相关阅读:
    描述一下 JVM 加载 class 文件的原理机制?
    Java 中会存在内存泄漏吗,请简单描述
    关于同步机制的一些见解
    Mybatis 一对一,一对多,多对一,多对多的理解
    关于JavaBean实现Serializable接口的见解
    Python 文件I/O
    Python 模块
    Python 函数
    Python time tzset()方法
    Python time time()方法
  • 原文地址:https://www.cnblogs.com/one-tom/p/11213555.html
Copyright © 2020-2023  润新知