2014-10-19 3 views
1

Я застрял на функции в моей программе, которая форматирует несколько строк чисел, разделенных пробелами. Следующий код до сих пор занимает отформатированный список списков и делает его в таблицу разделенных пробелов без скобок:Как форматировать список списков, используя понимание списка?

def printMatrix(matrix): 
    return ('\n'.join(' '.join(map(str, row)) for row in matrix)) 

Я хотел бы все номера выстраиваться красиво, хотя на выходе. Я не могу понять, как привязать оператора формата к пониманию списка, чтобы это произошло. Вход всегда квадратная матрица (2х2 3x3 и т.д.) Вот остальная часть программы для уточнения

# Magic Squares 

def main(): 
    file = "matrix.txt" 
    matrix = readMatrix(file) 
    print(printMatrix(matrix)) 
    result1 = colSum(matrix) 
    result2 = rowSum(matrix) 
    result3 = list(diagonalSums(matrix)) 
    sumList = result1 + result2 + result3 
    check = checkSums(sumList) 
    if check == True: 
     print("This matrix is a magic square.") 
    else: 
     print("This matrix is NOT a magic square.") 
def readMatrix(file): 
    contents = open(file).read() 
    with open(file) as contents: 
     return [[int(item) for item in line.split()] for line in contents] 




def colSum(matrix): 
    answer = [] 
    for column in range(len(matrix[0])): 
     t = 0 
     for row in matrix: 
      t += row[column] 
     answer.append(t) 
    return answer 

def rowSum(matrix): 
    return [sum(column) for column in matrix] 


def diagonalSums(matrix): 
    l = len(matrix[0]) 
    diag1 = [matrix[i][i] for i in range(l)]   
    diag2 = [matrix[l-1-i][i] for i in range(l-1,-1,-1)] 
    return sum(diag1), sum(diag2) 


def checkSums(sumList): 
    return all(x == sumList[0] for x in sumList) 

def printMatrix(matrix): 
    return ('\n'.join(' '.join(map(str, row)) for row in matrix)) 

Основной()

+0

Я думаю, что вы могли бы найти эту нить полезным http://stackoverflow.com/questions/13214809/pretty-print-2d-python-list – user3378649

+0

некоторые пример ввода? Я предполагаю, что строки различаются по длине? –

ответ

1
def printMatrix(matrix): 
    return "\n".join((("{:<10}"*len(row)).format(*row))for row in matrix) 


In [19]: arr=[[1,332,3,44,5],[6,7,8,9,100]] 

In [20]: print(printMatrix(arr)) 
1   332  3   44  5   
6   7   8   9   100 

"{:<10}"*len(row)) создает {} для левого каждое число выровнена 10 <:10 затем мы используем str.format format(*row) для распаковки каждой строки.

0

Нечто подобное Шоуда сделать трюк:

def print_matrix(matrix, pad_string=' ', padding_ammount=1, 
       number_delimiter=' ', number_width=3): 
    ''' 
    Converts a list of lists holding integers to a string table. 
    ''' 

    format_expr = '{{:{}>{}d}}'.format(number_delimiter, number_width) 
    padding = pad_string * padding_ammount 
    result = '' 
    for row in matrix: 
     for col in row: 
      result = '{}{}{}'.format(
       result, 
       padding, 
       format_expr 
      ).format(col) 
     result = '{}\n'.format(result) 
    return result 

a = [ 
    [1, 2, 3, 22, 450], 
    [333, 21, 13, 5, 7] 
] 

print(print_matrix(a)) 
# 1 2 3 22 450 
# 333 21 13 5 7 

print(print_matrix(a, number_delimiter=0) 
# 001 002 003 022 450 
# 333 021 013 005 007 
Смежные вопросы