猿问

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

我有一个列表列表,其中 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


墨色风雨
浏览 128回答 3
3回答

慕雪6442864

您可以使用以下列表理解: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.]])

慕标琳琳

单次np.num_to_nan通话:import numpy as npl_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.]]

一只甜甜圈

您可以使用numpy.nan_to_num,因为numpy无论如何您都在使用import numpy as npl_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.]]
随时随地看视频慕课网APP

相关分类

Python
我要回答