Подтвердить что ты не робот

Довольно печатать 2D-список Python

Есть ли простой, встроенный способ печати 2D-списка Python в виде 2D-матрицы?

Итак, это:

[["A", "B"], ["C", "D"]]

станет чем-то вроде

A    B
C    D

Я нашел модуль pprint, но он, похоже, не делает того, что я хочу.

4b9b3361

Ответ 1

Чтобы сделать что-то интересное, попробуйте с большей матрицей:

matrix = [
   ["Ah!",  "We do have some Camembert", "sir"],
   ["It a bit", "runny", "sir"],
   ["Well,",  "as a matter of fact it's", "very runny, sir"],
   ["I think it runnier",  "than you",  "like it, sir"]
]

s = [[str(e) for e in row] for row in matrix]
lens = [max(map(len, col)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = [fmt.format(*row) for row in s]
print '\n'.join(table)

Вывод:

Ah!                     We do have some Camembert   sir            
It a bit              runny                       sir            
Well,                   as a matter of fact it    very runny, sir
I think it runnier    than you                    like it, sir  

UPD: для многострочных ячеек должно работать что-то вроде этого:

text = [
    ["Ah!",  "We do have\nsome Camembert", "sir"],
    ["It a bit", "runny", "sir"],
    ["Well,",  "as a matter\nof fact it's", "very runny,\nsir"],
    ["I think it's\nrunnier",  "than you",  "like it,\nsir"]
]

from itertools import chain, izip_longest

matrix = chain.from_iterable(
    izip_longest(
        *(x.splitlines() for x in y), 
        fillvalue='') 
    for y in text)

Затем примените приведенный выше код.

См. также http://pypi.python.org/pypi/texttable

Ответ 2

Если вы можете использовать Pandas (Библиотека анализа данных Python), вы можете распечатать 2D-матрицу, преобразов ее в объект DataFrame:

from pandas import *
x = [["A", "B"], ["C", "D"]]
print DataFrame(x)

   0  1
0  A  B
1  C  D

Ответ 3

Вы всегда можете использовать NumPy:

import numpy as np
A = [['A', 'B'], ['C', 'D']]
print(np.matrix(A))

Выход:

[['A' 'B']
 ['C' 'D']]

Ответ 4

Для Python 3:

matrix = [["A", "B"], ["C", "D"]]

print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in matrix]))

Выход

A   B
C   D

Ответ 5

Более легкий подход, чем pandas, заключается в использовании модуля prettytable

from prettytable import PrettyTable

x = [["A", "B"], ["C", "D"]]

p = PrettyTable()
for row in x:
    p.add_row(row)

print p.get_string(header=False, border=False)

дает:

A B
C D

prettytable имеет множество опций для форматирования вывода по-разному.

Подробнее см. https://code.google.com/p/prettytable/

Ответ 6

Вы можете обновить print end=' ' так, чтобы он печатал пробел вместо '\n' во внутреннем цикле, и внешний цикл мог иметь print().

a=[["a","b"],["c","d"]] for я in a: for j in i: print(j, end=' ') print()

Я нашел это решение здесь https://snakify.org/en/lessons/two_dimensional_lists_arrays/.

Ответ 7

Смотрите следующий код.

# Define an empty list (intended to be used as a matrix)
matrix = [] 
matrix.append([1, 2, 3, 4])
matrix.append([4, 6, 7, 8])
print matrix
# Now just print out the two rows separately
print matrix[0]
print matrix[1]