Python是获取排序列表中元素索引的有效方法,使用多个属性进行排序

2024-10-02 08:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个xyz坐标列表,格式如下:

mycrds = [[0.0, 0.5, 0.1],
          [0.4, 0.6, 0.8],
          [0.2, 0.3, 0.9], ...]

我知道如果我想得到排序列表,首先按z排序,其次按y排序,最后按x排序,我需要做:

sorted(mycrds, key=lambda x: [x[2], x[1], x[0]])

但是如何获得排序列表中每个坐标的原始索引列表呢?到目前为止,我已经尝试了how to return index of a sorted list?中描述的所有方法,但是除了O(N^2)方法之外,没有一种方法工作得很好。我想知道有没有什么有效的方法?你知道吗


Tags: ofto方法lambdakey列表indexreturn
2条回答

给出:

mycrds = [[0.0, 0.5, 0.9],
          [0.4, 0.6, 0.8],
          [0.2, 0.3, 0.1]]

如果这为您提供了所需的排序顺序:

>>> sorted(mycrds, key=lambda sl: (sl[2],sl[1],sl[0]))
[[0.2, 0.3, 0.1], [0.4, 0.6, 0.8], [0.0, 0.5, 0.9]]

然后您可以得到每个列表项的原始索引,如下所示:

>>> sorted(range(len(mycrds)), key=lambda i: (mycrds[i][2],mycrds[i][1],mycrds[i][0]))
[2, 1, 0]

因此,您所做的就是对0..len(your_list)中的一个范围进行排序,并使用该索引i引用列表中的元素并以相同的方式形成排序元组。这与对基础列表进行排序的复杂性相同。你知道吗

l2 = list(enumerate(mycrds))
sorted(l2, key=lambda x: [x[1][2], x[1][1], x[1][0]])
print(l2)

枚举将保留数组的原始坐标。你知道吗

相关问题 更多 >

    热门问题