如何通过使用for循环并且不使用numpy来消除这些if语句并使其更简单
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
答案 0 :(得分:3)
使用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]]