Есть ли простой, встроенный способ печати 2D-списка Python в виде 2D-матрицы?
Итак, это:
[["A", "B"], ["C", "D"]]
станет чем-то вроде
A B
C D
Я нашел модуль pprint, но он, похоже, не делает того, что я хочу.
Есть ли простой, встроенный способ печати 2D-списка Python в виде 2D-матрицы?
Итак, это:
[["A", "B"], ["C", "D"]]
станет чем-то вроде
A B
C D
Я нашел модуль pprint, но он, похоже, не делает того, что я хочу.
Чтобы сделать что-то интересное, попробуйте с большей матрицей:
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
Если вы можете использовать Pandas (Библиотека анализа данных Python), вы можете распечатать 2D-матрицу, преобразов ее в объект DataFrame:
from pandas import *
x = [["A", "B"], ["C", "D"]]
print DataFrame(x)
0 1
0 A B
1 C D
Вы всегда можете использовать NumPy:
import numpy as np
A = [['A', 'B'], ['C', 'D']]
print(np.matrix(A))
Выход:
[['A' 'B']
['C' 'D']]
Для 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
Более легкий подход, чем 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/
Вы можете обновить 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/.
Смотрите следующий код.
# 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]