首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何按列对二维列表进行排序?

如何按列对二维列表进行排序?
EN

Stack Overflow用户
提问于 2016-10-30 21:49:45
回答 1查看 195关注 0票数 2

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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()

示例输出需要类似于以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 
EN

回答 1

Stack Overflow用户

发布于 2016-10-30 21:57:33

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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)]

在Python3.x中,result将是一个zip对象;您需要对其调用list

如果您希望将结果保存为列表(而不是元组)的列表,则可以使用列表理解来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> [list(s) for s in zip(*map(sorted, zip(*lst)))]
[[-3, -53, -65], [26, 40, -55], [29, 58, -46]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40334002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文