如何对以下内容进行排序

2024-06-28 19:26:15 发布

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

请注意,我已经尝试使用在这个论坛上提供的答案,加上其他网络资源之前发布这个。我基本上是个初学者。你知道吗

使用Py 2.7.10

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

D = [A,B,C]

我如何首先1)按A(升序)、2)按B(升序)和3)按C(升序)排序。在这种情况下,值是A(x坐标)、B(Y坐标)和C(z坐标)。我试过使用一个函数,但是它重新设置了a、B和C变量的范围,但是我希望a、B和C的第一个元素能够粘在一起,因为它们是彼此的。你知道吗

提前谢谢。你知道吗


Tags: 函数答案py元素排序情况论坛初学者
3条回答

您可以使用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)

如果需要以列表格式输出:

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

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

所以我假设A是x,B,y,C,z坐标的列表。您希望对矩阵中的列进行排序,以便数字垂直排列在一起。你知道吗

首先我要转换矩阵:

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

然后对列表进行排序。正如zondo所说,sort在本例中默认执行您想要的操作:

matrix.sort()

最后把矩阵换回来:

matrix = zip(*matrix)

我认为首先你需要把你的ABC列表转换成一个(x,y,z)坐标列表。可以这样使用^{}

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

然后-使用^{}按您希望的方式对列表排序:

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坐标检索到单独的列表中,可以使用^{}例如:

A_new, B_new, C_new = zip(*coords_sorted_by_z)

注意,您使用的是python2.7。尽管我衷心建议您使用Python3,但主要的区别在于您不需要执行list(zip(...)),而只需要执行zip(...),因为在Python2中,zip返回一个列表。你知道吗

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

相关问题 更多 >