如何根据浮点数列表对嵌套列表进行排序

How to sort a nested list based on a list of floats

提问人:ogclifford 提问时间:7/18/2022 最后编辑:Mark Dickinsonogclifford 更新时间:7/19/2022 访问量:84

问:

我目前有两个列表,如下所示:

A = [[1.1,2.0,3.3][3.8,50.9,1.0][25.2,6.2,2.2]]
B = [14.4, 0.1, 7.2]

我想根据 的索引进行排序,以便生成的排序列表如下所示:AB

sorted_A = [[3.8,50.9,1.0][25.2,6.2,2.2][1.1,2.0,3.3]]
sorted_B = [0.1,7.2,14.4]

我尝试使用以下方法对这些进行排序,尝试:zip

sorted_A = [a for _, a in sorted(zip(B, A))]

但我遇到以下错误:

“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”

任何帮助都是值得赞赏的,谢谢!

python numpy 排序 浮点 嵌套列表

评论

0赞 Mark Dickinson 7/18/2022
请您添加足够的代码来重现该问题吗?(如果您将其粘贴到 Python 提示符中,则您给出的表达式会给出一个。另外,我怀疑您使用的是 NumPy 和 NumPy 数组而不是列表;如果是这样,则值得将该信息添加到问题中。具体来说,我可以重现您的问题。请注意,包含重复的元素是重现您所描述的错误的基本要素。ATypeErrorimport numpy as np; A=np.array([[1.1,2.0,3.3],[3.8,50.9,1.0],[25.2,6.2,2.2]]); B=np.array([7.2, 0.1, 7.2]); sorted(zip(B, A))B
0赞 Mark Dickinson 7/18/2022
至于解决方案,如果您确实在使用 NumPy,您可能需要查看 numpy.argsort

答:

0赞 j1-lee 7/18/2022 #1

您可以使用两次。另请注意 :zipkeysorted

from operator import itemgetter

A = [[1.1,2.0,3.3],[3.8,50.9,1.0],[25.2,6.2,2.2]]
B = [14.4, 0.1, 7.2]

sorted_A, sorted_B = zip(*sorted(zip(A, B), key=itemgetter(1)))
print(sorted_A) # ([3.8, 50.9, 1.0], [25.2, 6.2, 2.2], [1.1, 2.0, 3.3])
print(sorted_B) # (0.1, 7.2, 14.4)

您可以使用代替 .key=lambda x: x[1]key=itemgetter(1)

0赞 omar 7/18/2022 #2

如果要对每个列表中的数字进行排序 这是代码

def sort(lst_in):
lst_out = []
for i in lst_in:
    if type(i) == list:
        lst_out.append(sorted(i, key = lambda x:float(x)))
    else:
        lst_out.append(sorted(lst_in, key = lambda x:float(x)))
        return lst_out[0]
return lst_out


print(sort([[1.1,2.0,3.3],[3.8,50.9,1.0],[25.2,6.2,2.2]]))

print(sort([14.4, 0.1, 7.2]))

输出为

[[1.1, 2.0, 3.3], [1.0, 3.8, 50.9], [2.2, 6.2, 25.2]]
[0.1, 7.2, 14.4]