Python数组移除特定值:二维数组如何使用result[result >=0]过滤?
哈哈,这个问题我之前处理二维数组的时候也碰到过!刚好可以给你分享两种常用场景的解决方法,看你用的是普通Python列表还是NumPy数组:
方法一:如果用的是NumPy二维数组(最接近你要的简洁写法)
你提到的result[result >= 0]是NumPy里的布尔索引语法,二维数组也能直接用类似逻辑,分两种需求场景:
场景1:把所有非-1的元素提取成一维数组
假设你的二维数组是这样的:
import numpy as np arr = np.array([[1, -1, 3], [-1, 5, 6], [7, 8, -1]])
直接用布尔索引过滤:
filtered_arr = arr[arr != -1]
结果会是 array([1, 3, 5, 6, 7, 8]),和一维数组的写法几乎一样!
场景2:保留原二维行结构,只去掉每行中的-1元素
如果想保留每行的独立结构,只剔除每行里的-1,可以结合列表推导式和NumPy的行过滤:
filtered_arr = np.array([row[row != -1] for row in arr])
结果是一个包含多个子数组的数组:array([array([1, 3]), array([5, 6]), array([7, 8])], dtype=object)
方法二:如果用的是普通Python二维列表
如果是原生Python的列表结构,用列表推导式就能轻松实现过滤:
场景1:提取所有非-1元素为一维列表
arr = [[1, -1, 3], [-1, 5, 6], [7, 8, -1]] filtered_list = [num for row in arr for num in row if num != -1]
得到结果:[1, 3, 5, 6, 7, 8]
场景2:保留二维行结构,剔除每行的-1
filtered_list = [[num for num in row if num != -1] for row in arr]
结果就是:[[1, 3], [5, 6], [7, 8]]
如果你用的是其他编程语言,核心思路其实都是遍历二维结构的每一行,再对每行的元素进行过滤,只是语法细节会有差异~
内容的提问来源于stack exchange,提问作者K.M.
相关产品推荐
相关产品推荐

