如果我有3D阵列; 例如:
[
[
[10,2],
[5,3],
[4,4]
],
[
[7,6],
[4,2],
[5,8]
]
]
我想根据 3rd dim&1st value。
对它们进行排序。这意味着结果应该是
[
[
[4,4],
[5,3],
[10,2]
],
[
[4,2],
[5,8],
[7,6]
]
]
如何在python中制作它?
Thx
答案 0 :(得分:1)
一种方法是使用list.sort方法或sorted函数以及 key 参数的适当值(请参阅文档:howto/sorting)。
Python文档在解释 key 参数的用途方面做得很好:
“ list.sort()和sorted()都有一个 key 参数,用于指定要在每个列表元素之前调用的功能 >进行比较。”
例如,让我们对您列表的第一项进行排序:
first=[[10, 2], [5, 3], [4, 4]]
def by_first(element):
"""
Sort a two-dimensional list by the first element
Param: element of the list i.e [10, 2]
Return: first item of element
"""
return element[0]
所以,要对上面的列表进行排序
sorted(first,key=by_first)
最后,要解决最初的问题(三维列表),我们只需对列表中的每个项目
进行上述操作list_numbers = [[[10, 2], [5, 3], [4, 4]], [[7, 6], [4, 2], [5, 8]]]
[sorted(entry, key=by_first) for entry in list_numbers]
答案 1 :(得分:1)
下面的代码是实现所需输出的简单解决方法。
list= [[[10,2],[5,3],[4,4]],[[7,6],[4,2],[5,8]]]
for i in range(len(list)):
list[:][:][i].sort(key=lambda x: x[:][:][0])
print(list)
通过 for 循环的每次迭代,元素一次被排序一个列表。
答案 2 :(得分:0)
如果您正在寻找与数组(而非列表)更相关的内容,则可以尝试以下操作:
import numpy as np
a = np.array([[[10,2],
[5,3],
[4,4]],
[[7,6],
[4,2],
[5,8]]])
b = np.zeros(a.shape)
sorted_idx = np.argsort(a, axis=1)
for i in range(a.shape[0]):
for j in range(a.shape[1]):
b[i, j] = a[i, sorted_idx[i, j, 0]]
print(b.astype(int))
# [[[ 4 4]
# [ 5 3]
# [10 2]]
#
# [[ 4 2]
# [ 5 8]
# [ 7 6]]]
请注意,实际上,根据您的预期输出,您需要按axis=1
的第一个元素而不是最后一个轴进行排序。