如何排序以下

时间:2016-05-11 12:41:00

标签: python sorting

请注意,在发布此论坛之前,我已尝试使用此论坛上提供的答案以及其他网络来源。我几乎是初学者。

使用Py 2.7.10

A = [9,3,7]
B = [5,1,8]
C = [1,2,1]

D = [A,B,C]

我怎样才能首先按A(升序),2)按B(升序)和3)按C(升序)排序。在这种情况下,值是A(x坐标),B(Y坐标)和C(z坐标)。我尝试过使用一个函数,但它重新安排了A,B和C变量,但我希望A,B和C的第一个元素能够粘在一起,因为它们彼此属于。

提前致谢。

3 个答案:

答案 0 :(得分:3)

我认为首先您需要将ABC列表翻译成(x,y,z)个坐标列表。你可以这样使用zip

coords = list(zip(A,B,C))

然后 - 使用sorted

按照您希望的方式对列表进行排序
coords_sorted_by_x = sorted(coords,key=lambda c:c[0])
[(3, 1, 2), (7, 8, 1), (9, 5, 1)]
coords_sorted_by_y = sorted(coords,key=lambda c:c[1])
[(3, 1, 2), (9, 5, 1), (7, 8, 1)]
coords_sorted_by_z = sorted(coords,key=lambda c:c[2])
[(9, 5, 1), (7, 8, 1), (3, 1, 2)]

如果您需要将x,y和z坐标检索到单独的列表中,可以使用zip(*)例如:

A_new, B_new, C_new = zip(*coords_sorted_by_z)

您注意到您使用的是Python 2.7。虽然我衷心建议您使用Python 3,但主要区别在于您不需要list(zip(...))而只需zip(...),因为在python 2中,zip会返回一个列表。

正如您将看到的,如果您运行它,提供的代码适用于2和3。

答案 1 :(得分:0)

您可以使用Python列表中可用的默认排序功能。

    A.sort() // o/p : [3, 7, 9]
    B.sort() // o/p :  [1, 5, 8]
    C.sort() // o/p : [1, 1, 2]

然后执行以下操作就足够了:

    for e in zip(A,B,C):
        print e

    output:
        (3, 1, 1)
        (7, 5, 1)
        (9, 8, 2)

如果需要以listformat输出:

    for e in zip(A,B,C):
        print list(e)

    output:
        [3, 1, 1]
        [7, 5, 1]
        [9, 8, 2]

答案 2 :(得分:0)

所以我假设A是z-坐标的y-和c的x-,B的列表。您希望对矩阵中的列进行排序,以便数字保持垂直对齐。

首先我会调换你的矩阵:

matrix = [
  [9,3,7],
  [5,1,8],
  [1,2,1]
]
matrix = zip(*matrix)

然后对此列表进行排序。正如zondo所说,sort在这种情况下默认执行您想要的操作:

matrix.sort()

最后将矩阵转换回来:

matrix = zip(*matrix)