zoukankan      html  css  js  c++  java
  • python面试的100题(14)

    32.请写出一个函数满足以下条件

    该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素要满足以下条件:

    1、该元素是偶数

    2、该元素在原list中是在偶数的位置(index是偶数)

    def num_list(num):
        return [i for i in num if i %2 ==0 and num.index(i)%2==0]
    
    num = [0,1,2,3,4,5,6,7,8,9,10]
    result = num_list(num)
    print(result)

    33.使用单一的列表生成式来产生一个新的列表

    该列表只包含满足以下条件的值,元素为原始列表中偶数切片

    list_data = [1,2,5,8,10,3,18,6,20]
    res = [x for x in list_data[::2] if x %2 ==0]
    print(res)

    34.用一行代码生成[1,4,9,16,25,36,49,64,81,100]

    [x * x for x in range(1,11)]

    35.输入某年某月某日,判断这一天是这一年的第几天?

    import datetime
    
    y = int(input("请输入4位数字的年份:"))
    m = int(input("请输入月份:"))
    d = int(input("请输入是哪一天"))
    
    targetDay = datetime.date(y,m,d)
    dayCount = targetDay - datetime.date(targetDay.year -1,12,31)
    print("%s是 %s年的第%s天。"%(targetDay,y,dayCount.days))

    36.两个有序列表,l1,l2,对这两个列表进行合并不可使用extend

    def loop_merge_sort(l1,l2):
        tmp = []
        while len(l1)>0 and len(l2)>0:
            if l1[0] <l2[0]:
                tmp.append(l1[0])
                del l1[0]
            else:
                tmp.append(l2[0])
                del l2[0]
            

    37.给定一个任意长度数组,实现一个函数

    让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,如字符串'1982376455',变成'1355798642'

    # 方法一
    def func1(l):
        if isinstance(l, str):
            l = [int(i) for i in l]
        l.sort(reverse=True)
        for i in range(len(l)):
            if l[i] % 2 > 0:
                l.insert(0, l.pop(i))
        print(''.join(str(e) for e in l))
    
    # 方法二
    def func2(l):
        print("".join(sorted(l, key=lambda x: int(x) % 2 == 0 and 20 - int(x) or int(x))))

    38.写一个函数找出一个整数数组中,第二大的数

    def find_second_large_num(num_list):
        """
        找出数组第2大的数字
        """
        # 方法一
        # 直接排序,输出倒数第二个数即可
        tmp_list = sorted(num_list)
        print("方法一
    Second_large_num is :", tmp_list[-2])
        
        # 方法二
        # 设置两个标志位一个存储最大数一个存储次大数
        # two 存储次大值,one 存储最大值,遍历一次数组即可,先判断是否大于 one,若大于将 one 的值给 two,将 num_list[i] 的值给 one,否则比较是否大于two,若大于直接将 num_list[i] 的值给two,否则pass
        one = num_list[0]
        two = num_list[0]
        for i in range(1, len(num_list)):
            if num_list[i] > one:
                two = one
                one = num_list[i]
            elif num_list[i] > two:
                two = num_list[i]
        print("方法二
    Second_large_num is :", two)
        
        # 方法三
        # 用 reduce 与逻辑符号 (and, or)
        # 基本思路与方法二一样,但是不需要用 if 进行判断。
        from functools import reduce
        num = reduce(lambda ot, x: ot[1] < x and (ot[1], x) or ot[0] < x and (x, ot[1]) or ot, num_list, (0, 0))[0]
        print("方法三
    Second_large_num is :", num)
        
        
    if __name__ == '__main___':
        num_list = [34, 11, 23, 56, 78, 0, 9, 12, 3, 7, 5]
        find_second_large_num(num_list)

    39.阅读一下代码他们的输出结果是什么?

    def multi():
        return [lambda x : i*x for i in range(4)]
    print([m(3) for m in multi()])

    正确答案是[9,9,9,9],而不是[0,3,6,9]产生的原因是Python的闭包的后期绑定导致的,这意味着在闭包中的变量是在内部函数被调用的时候被查找的,因为,最后函数被调用的时候,for循环已经完成, i 的值最后是3,因此每一个返回值的i都是3,所以最后的结果是[9,9,9,9]

    40.统计一段字符串中字符出现的次数

    # 方法一
    def count_str(str_data):
        """定义一个字符出现次数的函数"""
        dict_str = {} 
        for i in str_data:
            dict_str[i] = dict_str.get(i, 0) + 1
        return dict_str
    dict_str = count_str("AAABBCCAC")
    str_count_data = ""
    for k, v in dict_str.items():
        str_count_data += k + str(v)
    print(str_count_data)
    
    # 方法二
    from collections import Counter
    
    print("".join(map(lambda x: x[0] + str(x[1]), Counter("AAABBCCAC").most_common())))
  • 相关阅读:
    洛谷P2050 美食节
    洛谷P2150 寿司晚宴
    区间最深LCA
    三层交换机
    VLAN 及 GVRP 配置
    GVRP
    VLAN IEEE802.1Q
    以太网端口技术
    网关与路由器
    Quidway S系列交换机
  • 原文地址:https://www.cnblogs.com/Fiona-Y/p/10572696.html
Copyright © 2011-2022 走看看