python - 如何按列对二维列表进行排序

标签 python arrays list 2d

如何摆脱这些 if 语句并通过使用 for 循环而不使用 numpy 使其更简单

 def sortColumns(grid):
    if grid[0][0] > grid[1][0]:
        grid[0][0],grid[1][0]= grid[1][0],grid[0][0]
    if grid[2][0] < grid[1][0]:
        grid[2][0],grid[1][0]= grid[1][0],grid[2][0]
    if grid[1][0] < grid[0][0]:
        grid[1][0],grid[0][0] = grid[0][0],grid[1][0]

    if grid[0][1] > grid[1][1]:
        grid[0][1],grid[1][1]= grid[1][1],grid[0][1]
    if grid[2][1] < grid[1][1]:
        grid[2][1],grid[1][1]= grid[1][1],grid[2][1]
    if grid[1][1] < grid[0][1]:
        grid[1][1],grid[0][1] = grid[0][1],grid[1][1]

    if grid[0][2] > grid[1][2]:
        grid[0][2],grid[1][2]= grid[1][2],grid[0][2]
    if grid[2][2] < grid[1][2]:
        grid[2][2],grid[1][2]= grid[1][2],grid[2][2]
    if grid[1][2] < grid[0][2]:
        grid[1][2],grid[0][2] = grid[0][2],grid[1][2]

for x in grid:
    for y in x:
        print(str(y).center(3,' '),end= ' ')
    print()

示例输出需要与此类似:

Enter the number of rows: 3
Enter the number of columns: 3
   -3  58 -46 
   29  40 -65 
   26 -53 -55 
Sorted list by column is 

  -3 -53 -65 
  26  40 -55 
  29  58 -46 

最佳答案

使用 zip 解压 * ,您可以转置,排序每个子列表,然后再次转置:

>>> lst = [[-3, 58, -46], [29, 40, -65], [26, -53, -55]]
>>> result = zip(*map(sorted, zip(*lst)))
>>> result
[(-3, -53, -65), (26, 40, -55), (29, 58, -46)]

在 Python 3.x 中,result将是 zip目的;您需要调用 list就在上面。

如果您想将结果保留为列表列表(而不是元组),您可以使用列表理解来实现:

>>> [list(s) for s in zip(*map(sorted, zip(*lst)))]
[[-3, -53, -65], [26, 40, -55], [29, 58, -46]]

关于python - 如何按列对二维列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40334002/

相关文章:

python - Ajax post请求返回空querydict

python - 数组的 numpy.shape 中的 L 和 numpy.type 中的 32 是什么?

arrays - 德尔福。多维数组作为参数

javascript - 来自字符串函数的图像

python - 如何从 python 2.7 中的三个列表创建矩阵列表?

algorithm - 你能帮我弄清楚这个算法吗?

python - 将 Pandas 数据框连接到多索引

python - 喀拉斯 : Implementing a custom metric with logical operators

PHP多维数组(usort)

list - 哈希表与线性列表