继续之前的面试题解析,下面是第二题:

  • 求1 +3!+5!+7!+9!+50!之和。

这道题其实考察的是用递归解决阶乘问题,查阅过后发现有三种方法可解(不过掌柜觉得其实是两种)。下面👇看第一种解法,常规思路:先找出单个阶乘的函数表达式后再求和:

应该不难理解第一种解法,下面尝试第二种解法👇:用列表推导式简化后求解递归

是不是觉得第一和第二其实是一样的?😂下面👇看第三种:直接调用Scipy库里面的阶乘模块factorial来计算

如果你想最少代码量解此题,第三种明显最合适!最易理解是第一种。

PS: 递归算法是个比较重要的概念,掌柜找到一张图(侵权可删)可以方便大家更易理解递归的整个过程👇,更多递归的内容请自行搜索。

  • 接着面试题三和四,是考用Pandas对数据集进行预处理。
    删除nan值超过70%的属性列;删除nan值超过3个的样本。
    先看示例:

    接着统计某一列中各个值出现的次数用value_counts()方法
    但是这道题是问的NaN值,所以用上面的方法是没法统计出来nan值得占比,要用下面得方法:


    这样就成功统计出每一列的null占比,现在我们要删除超过70%的列和nan值个数超过3个的样本:方法一是用del,只能删除一列,不可多列:

    方法二是用pop方法,也只能一列:

    方法三,使用drop方法:

    PPS: 上面👆这种drop方法删除指定数据后,并没有实时保存新的数据表,只是会显示删除后的数据;而数据表还是之前的样子:

    要想删除数据后生成新的数据表可以加入这个参数inplace


    接着删除超过3个nan值得样本,即A、C两列(删除多列的操作):

    最后拓展一下,删除单行和多行的操作:

    (未完待续。。。)