2016-10-30 42 views
2

二維列表?我怎樣才能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 
+0

獲取值,放在列表,排序列表使用'排序()',把列表中的元素放在列中。 – furas

回答

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]] 
+0

是否有一種方法可以使用for循環完成此操作,而不是列表理解 – Ironping