Existe-t-il un moyen simple et intégré d’imprimer une liste 2D Python sous forme de matrice 2D?
Donc ça:
[["A", "B"], ["C", "D"]]
deviendrait quelque chose comme
A B
C D
J'ai trouvé le module pprint, mais il ne semble pas faire ce que je veux.
Pour rendre les choses intéressantes, essayons avec une matrice plus grande:
matrix = [
["Ah!", "We do have some Camembert", "sir"],
["It's a bit", "runny", "sir"],
["Well,", "as a matter of fact it's", "very runny, sir"],
["I think it's 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)
Sortie:
Ah! We do have some Camembert sir
It's a bit runny sir
Well, as a matter of fact it's very runny, sir
I think it's runnier than you like it, sir
UPD: pour les cellules multilignes, quelque chose comme ceci devrait fonctionner:
text = [
["Ah!", "We do have\nsome Camembert", "sir"],
["It's 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)
Et appliquez ensuite le code ci-dessus.
Voir aussi http://pypi.python.org/pypi/texttable
Si vous pouvez utiliser Pandas (Python Data Analysis Library), vous pouvez imprimer une matrice 2D en la convertissant en un objet DataFrame:
from pandas import *
x = [["A", "B"], ["C", "D"]]
print DataFrame(x)
0 1
0 A B
1 C D
Vous pouvez toujours utiliser numpy
import numpy as np
print(np.matrix(A))
Pour Python 3:
matrix = [["A", "B"], ["C", "D"]]
print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in matrix]))
Sortie
A B
C D
Vous pouvez mettre à jour le end=' '
de print
afin qu'il imprime un espace au lieu de '\ n' dans la boucle interne et que la boucle externe puisse avoir print()
.
a=[["a","b"],["c","d"]]
for i in a:
for j in i:
print(j, end=' ')
print()
J'ai trouvé cette solution de ici https://snakify.org/en/lessons/two_dimensional_lists_arrays/ .
Une approche plus légère que pandas
consiste à utiliser le module 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)
rendements:
A B
C D
prettytable
a beaucoup d'options pour formater votre sortie de différentes manières.
Voir https://code.google.com/p/prettytable/ pour plus d'informations.