请注意,在发布此论坛之前,我已尝试使用此论坛上提供的答案以及其他网络来源。我几乎是初学者。
使用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的第一个元素能够粘在一起,因为它们彼此属于。
提前致谢。
答案 0 :(得分:3)
我认为首先您需要将A
,B
和C
列表翻译成(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)