为了账号安全,请及时绑定邮箱和手机立即绑定

从列表列表中替换列表中的所有元素

从列表列表中替换列表中的所有元素

墨色风雨 2022-05-19 13:57:01
我有一个列表列表,其中 1 个列表中充满了 nans。l_of_l=[[1,2,3],[nan,nan,nan],[3,4,5]]我想用 nans 替换 l_of_l 的列表为零:所需的输出是l_of_l=[[1,2,3],[0,0,0],[3,4,5]]这是我的代码:     for list1 in l_of_l:               if all(np.isnan(list1)) == True:               list1 = [0] * len(list1)但是我不确定如何在不需要生成新列表的情况下将结果再次分配给 l_of_l
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您可以使用以下列表理解:


import numpy as np


[[0 if np.isnan(j) else j for j in i] for i in l_of_l]

# [[1, 2, 3], [0, 0, 0], [3, 4, 5]]

如果您想避免 importing numpy,尽管数据表明您应该使用它,但您实际上可以这样做:


[[0 if j!=j else j for j in i] for i in l_of_l]

# [[1, 2, 3], [0, 0, 0], [3, 4, 5]]

根据定义NaNs,这永远不会等于它们自己


或者直接构建一个numpy数组并使用nan_to_num:


np.nan_to_num(np.array(l_of_l))


array([[1., 2., 3.],

       [0., 0., 0.],

       [3., 4., 5.]])


查看完整回答
反对 回复 2022-05-19
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

单次np.num_to_nan通话:


import numpy as np


l_of_l = np.array([[1,2,3],[np.nan, np.nan, np.nan],[3,4,5]])

np.nan_to_num(l_of_l, copy=False)

print(l_of_l)

输出:


[1. 2. 3.]

 [0. 0. 0.]

 [3. 4. 5.]]


查看完整回答
反对 回复 2022-05-19
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您可以使用numpy.nan_to_num,因为numpy无论如何您都在使用


import numpy as np

l_of_l= np.array([[1, 2, 3],[np.nan, np.nan, np.nan], [3, 4, 5]])

print(np.nan_to_num(l_of_l))

印刷


[[1. 2. 3.]

 [0. 0. 0.]

 [3. 4. 5.]]


查看完整回答
反对 回复 2022-05-19
  • 3 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信