Python 关于 for 语句的特殊使用 2021-2-22

Python 关于 for 语句的特殊使用 2021-2-22

在Python中,for语句除了在循环中的使用外,还有一种比较特殊的使用方式,下面以我遇到的实际问题进行说明。

drop_feats = [f for f in train_df.columns if train_df[f].nunique() == 1 or train_df[f].nunique() == 0]

这个语句可以分解为好几个部分进行理解:
第一步:是赋值等号,表示通过给drop_feats这个数组赋值
第二步:将中括号中的语句分为两部分,第一部分取右边的判断语句

 if train_df[f].nunique() == 1 or train_df[f].nunique() == 0]

nunique函数为判断一列中不同值的个数,当这一列中数值全为相同时,nunique=1。当nunique=0时,应该是该列为空。
显然,该语句是判断当这一列的值都相同或者为空时if条件成立。
第三部分:也是最难的括号左边的部分,不同于基本的for循环语句,他在for的左边还有一个变量。

f for f in train_df.columns 

这段的意思是:对于在 train_df.columns 中的元素 f 。
其实这样与for循环的操作基本没有区别,但是对于数组赋值的时候就有区别了,此时f指代for循环条件里的变量,并可以给数组赋值
举一个例子来说明,该例子来源别人的博客: col2 = [col[0] for col in listt] 类型操作的解释
我在该博客的基础上进行了一些理解和解释说明。

listt = [[1,2,3],
         [4,5,6],
         [7,8,9]]
print(listt)
print(listt[1])

col2 = [col[0] for col in listt]      #   此时 col是listt的一个元素,
print(col2)   #     然后col[0]就是这个元素的第一个值,因此 col2=listt中每个元素的第一个值

col22 = [col[2] for col in listt if col[2] % 2 == 0]
print(col22)
print(listt[0][2])
print(listt[1][2])
print(listt[2][2])

我的运行结果如图:
在这里插入图片描述
根据代码中的注释,可以很好地理解。
这一方法其实也是在for循环上的赋值使用,实质等同于在for循环中对数组赋值。
因此,重新回到之前的问题上,

drop_feats = [f for f in train_df.columns if train_df[f].nunique() == 1 or train_df[f].nunique() == 0]

这段代码意思为:对于train_df这个列表中的每一列(column),每列进行求nunique值,对于每列都是同一个值或是空值的列,将其列名赋给drop_feats,这个数组作为要删除的特征的列名集合。
这段代码的作用是:筛选出特征值单一和空值的列,即对分类无用的特征,这样做可以减小机器学习训练的时间,提高效率。

参考文献
col2 = [col[0] for col in listt] 类型操作的解释
https://blog.csdn.net/qq_40688707/article/details/89176482

感谢CSDN上博主的无私分享,才有知识的互通和交流,如果有什么问题和错误,欢迎指正和交流。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值