如何从ndarray每行选取不重复的最小/次小值存入列表?
解决方法
核心思路
利用集合快速查重的特性,结合每行已排序的前提,逐行遍历元素:优先选取每行最小的未重复值,找到后立即停止当前行的遍历,处理下一行。
代码实现
import numpy as np # 输入的4×4 ndarray arr = np.array([[1,10,20,30],[10,50,60,70],[10,20,50,60],[1,20,25,65]]) result = [] # 用集合记录已选值,O(1)时间复杂度查重 seen = set() # 外层循环遍历每一行 for row in arr: # 内层循环遍历当前行的元素(从小到大) for num in row: if num not in seen: result.append(num) seen.add(num) break # 找到符合条件的值,跳出当前行的循环 print(result) # 输出: [1, 10, 20, 25]
关键说明
- 用
seen集合而非列表做查重:集合的成员判断操作效率远高于列表,避免数据量大时性能下降。 - 无需手动维护索引:直接遍历行内元素,利用每行已排序的特性,第一个未出现在
seen中的元素就是当前行符合要求的最小可用值,从根本上避免索引逻辑错误。 - 内层循环的
break:确保每行只选一个值,符合需求。
内容的提问来源于stack exchange,提问作者n_cen
相关产品推荐
相关产品推荐

