[英]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
两次。 还要注意sorted
的key
参数:
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.