2015-07-22 3 views
1

Я хочу показать простой 2D-массив в табличном формате с заголовками вверху, чтобы значения выстраивались под заголовками. Есть ли способ сделать это? Я посмотрел на печать и печать с помощью numpy, но не могу заставить его работать. Вот что у меня есть на данный момент:Как выстроить столбцы при печати из 2d массива в Python?

myArray = [['Student Name','Marks','Level'],['Johnny',68,4],['Jennifer',59,3],['William',34,2]] 

for row in myArray: 
    print(" ") 
    for each in row: 
     print(each,end = ' ') 

Любые предложения?

+0

^^ Этот код ужасен ИМО (но работает хорошо). Я бы использовал параметр Format. Ознакомьтесь с этим сайтом, чтобы узнать, как работает дополнение. Просто установите для вашего дополнения самую большую строку http://pyformat.info/ – FirebladeDan

ответ

1

Вам просто нужно выровнять на основе длины самого длинного элемента:

myArray = [['Student Name','Marks','Level'],['Johnny',68,4],['Jennifer',59,3],['William',34,2]] 
mx = len(max((sub[0] for sub in myArray),key=len)) 

for row in myArray: 
    print(" ".join(["{:<{mx}}".format(ele,mx=mx) for ele in row])) 

Выход:

Student Name Marks  Level  
Johnny  68   4   
Jennifer  59   3   
William  34   2 

Чтобы включить значения INT в длину не более известково:

mx = max((len(str(ele)) for sub in myArray for ele in sub)) 
for row in myArray: 
    print(" ".join(["{:<{mx}}".format(ele,mx=mx) for ele in row])) 

Выход:

Student Name Marks  Level  
Johnny  68   4   
Jennifer  59   3   
William  34   2  
+0

Спасибо за это, это намного проще, чем тот, который я только что использовал из предыдущего ответа. Я не знаком с этими типами утверждений о понимании (что они называются?). Я вижу, как работает линия печати кода, что делает max и key = len в первой строке? – user2127168

+0

Нет, это было немного сложно. –