继续之前的面试题解析,下面是第二题:
- 求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两列(删除多列的操作):
最后拓展一下,删除单行和多行的操作:
(未完待续。。。)