Python - 将 ndarray 每行的最小值添加到列表中。如果最小的数字已经在列表中,则添加下一个最小的数字

Python - Add the smallest value from each row of an ndarray to a list. If the smallest number is already in list , then add next smallest

提问人:n_cen 提问时间:11/16/2023 最后编辑:n_cen 更新时间:11/16/2023 访问量:40

问:

假设我有一个 4x4 数组,每一行都已按最小值排序。我想创建一个列表,其中包含每个数组行的最小值,而不重复值。因此,如果列表中已经存在最小值,我们应该取下一个最小值并将其添加到列表中。

数组的每一行都已按最小值排序

set=[ [1,10,20,30],[10,50,60,70],[10,20,50,60],[1,20,25,65] ]
A=np.asarray(set) #A[0,0] = 1 ; A[3,3] = 65
minval=[] #list to append min values to

所以最终列表将是 [1,10,20,25]

我首先尝试遍历 A[i,j] 并附加到 minval 如果它不在 minval 中,但这甚至不起作用。在那之后,一旦我们附加了 A[i] 的值,我就不知道如何打破循环了

minval=[]
for i in A: #expect A[0] through A[3]
    for j in A[i]: #expect A[0,0] through A[3,3]
        minval.append(A[i,j]) if A[i,j] not in minval else minval
        

这已经给了我一个错误,因为 i 的第一个值是一个数组,而不是我预期的 y[0]

python 列表 numpy-ndarray

评论


答:

1赞 Justin 11/16/2023 #1

由于每一行都已按最小值排序,因此我们可以这样做:

list = [ [1, 10, 20, 30], [10, 50, 60, 70], [10, 20, 50, 60], [1, 20, 25, 65] ]
new_list = []

for row in list:
    for col in row:
        if col not in new_list:
            new_list.append(col)
            break

评论

1赞 n_cen 11/16/2023
伟大!因此,我使用上面的列表创建了 ndarray 以进行娱乐。如果我从 ndarray A 开始,那么我只会执行 A.tolist() 然后遍历排序列表。谢谢!