Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
漂亮的打印2D Python列表_Python_Matrix - Fatal编程技术网

漂亮的打印2D Python列表

漂亮的打印2D Python列表,python,matrix,Python,Matrix,是否有一种简单的内置方式将2D Python列表打印为2D矩阵 因此: [["A", "B"], ["C", "D"]] 会变成 A B C D 我找到了pprint模块,但它似乎没有达到我想要的效果。为了让事情变得有趣,让我们尝试使用更大的矩阵: matrix = [ ["Ah!", "We do have some Camembert", "sir"], ["It's a bit", "runny", "sir"], ["Well,", "as a ma

是否有一种简单的内置方式将2D Python列表打印为2D矩阵

因此:

[["A", "B"], ["C", "D"]]
会变成

A    B
C    D

我找到了pprint模块,但它似乎没有达到我想要的效果。

为了让事情变得有趣,让我们尝试使用更大的矩阵:

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)
输出:

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:对于多行单元格,类似这样的操作应该可以:

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)
然后应用上述代码

另请参见

如果可以使用Pandas(Python数据分析库),则可以通过将2D矩阵转换为DataFrame对象来漂亮地打印它:

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

   0  1
0  A  B
1  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
有很多选项可以用不同的方式格式化输出


有关更多信息,请参见,您可以随时使用:

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

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

请参阅下面的代码

# 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]

对于不含任何第三部分库的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

您可以更新
print
end='
,以便它在内部循环中打印空格而不是'\n',而外部循环可以有
print()

a=[[“a”,“b”,“c”,“d”]]
对于我来说,在一个:
对于i中的j:
打印(j,end='')
打印()

我从。

中找到此解决方案只是为了提供一个更简单的替代方案:

解释
*行
解包
,因此当
[“A”,“B”]
时,例如调用
打印(“A”,“B”)

注意 只有当每列的宽度相同时,两个答案的格式才会很好。要更改分隔符,请使用
sep
关键字。比如说,

for row in matrix:
    print(*row, sep=', ')
将打印

A, B
C, D
相反

一个不带for循环的衬里

print(*(' '.join(row) for row in matrix), sep='\n')
'.join(row)for row in matrix)
为每一行返回一个字符串,例如当
row
[“a”,“B”]
时,
a B


*(“”.join(row)for row in matrix),sep='\n')
解压返回序列
'A B',C D'
的生成器,以便
打印('A B',C D',sep='\n')
用于给定的示例
矩阵

如果您使用的是笔记本/IPython环境,然后,Symphy可以使用IPython.display打印令人满意的矩阵:

import numpy as np
from sympy import Matrix, init_printing
init_printing()

print(np.random.random((3,3)))
display(np.random.random((3,3)))
display(Matrix(np.random.random((3,3))))

我还建议您也可以选择打印标题:

from tabulate import tabulate

lst = [['London', 20],['Paris', 30]]
print(tabulate(lst, headers=['City', 'Temperature']))
:


我会称之为3D列表。如果你愿意加入,
numpy
在这方面做得很好。请参阅我的答案。genius!但是如果我们想在每个单元格中有多行,例如一个3D数组:)@CpILL:一个选项是将3D解压成2D:
[[a,b,c],[xyz]]=>[[a,x],[b,y],[c,z]]
,然后应用上面的方法。你的意思是透视数据吗?@CpILL:添加了一个示例。我们如何将表格限制为,前10个值?虽然这个答案可能是正确的和有用的,但如果你能解释它如何帮助解决问题,那就更好了。这在将来变得特别有用,如果有一个变化(可能不相关)导致它停止工作,用户需要了解它曾经是如何工作的。这正是我想要的。谢谢。试试这个,看看发生了什么听起来不像是一个答案。请回顾:显示输出以与其他解决方案进行比较将是一种“很好的选择”,使用
print(np.array(a))
以避免警告好东西,ey。
from tabulate import tabulate

lst = [['London', 20],['Paris', 30]]
print(tabulate(lst, headers=['City', 'Temperature']))
City      Temperature
------  -------------
London             20
Paris              30