【发布时间】:2020-03-19 16:33:31
【问题描述】:
我有一个 3d 列表或 numpy 数组,我需要按最小的第一项索引对其进行排序。 这是我在这个程序上做的最后两个尝试。抱歉,我很确定这是一个简单/愚蠢的问题,但作为编程“思维方式”的新手,这对我来说有点难。 第一次尝试:
lstsArray = [[[54,21,31], [1,2,3], [15,25,35]],
[[12,22,32], [3,2,1], [16,26,36]],
[[34,24,38], [0.1,1,1], [17,27,37]]]
val = np.array(lstsArray)
menor = 120e26
for item in val:
for i in item:
if menor >= i[0] and i[0] >= min(i):
menor = i[0]
print(menor)
lstA = list(val)
a = sorted(lstA, key=itemgetter(menor))
print(a)
第二次尝试
for i in val:
for j in i:
print(sorted((i), key =itemgetter(j[0])))
期望的输出
[[[0.1,1,1],[1,2,3],[3,2,1]],
[[12,22,32],[15,25,35],[16,26,36]],
[[17,27,37],[34,24,38],[54,21,31]]]
【问题讨论】:
-
所以基本上,展平,排序,然后放回原来的结构。你知道它是 3x3 还是任意结构?它必须是麻木的吗? stackoverflow.com/questions/32416594/… 中可能有一些有用的东西
-
嗨,Kenny,它必须是 numpy,因为数据量很大。然后,我认为 numpy 更快,对吧?!
-
numpy并不总是比 Python 列表方法快,尤其是在您必须首先将列表转换为数组的情况下。在此示例中,0.1值意味着整个array将是 float dtype。 -
@MadPhysicist,我将重新打开它,因为此列表中的 dtypes 和嵌套引发了一些超出简单使用
argsort的问题。 -
@hpaulj。我认为您的回答充分证明了重新开放的合理性。我不希望 OP 自行从您的提案的任何重复答案中得出结论