簡體   English   中英

如何根據浮點數列表對嵌套列表進行排序

[英]How to sort a nested list based on a list of floats

我目前有兩個列表,如下所示:

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]

我想根據B的索引對A進行排序,這樣生成的排序列表將如下所示:

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()”

任何幫助表示贊賞,謝謝!

您可以使用zip兩次。 還要注意sortedkey參數:

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)

如果你想在每個列表中對數字進行排序,這就是代碼

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM