我对Python很陌生,现在我正在努力为打印输出很好地格式化我的数据.
我有一个用于两个标题的列表,以及一个应该是表格内容的矩阵.像这样:
teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
[0, 1, 0],
[2, 4, 2]])
Run Code Online (Sandbox Code Playgroud)
请注意,标题名称的长度不一定相同.但是,数据条目都是整数.
现在,我想以表格格式表示这个,如下所示:
Man Utd Man City T Hotspur
Man Utd 1 0 0
Man City 1 1 0
T Hotspur 0 1 2
Run Code Online (Sandbox Code Playgroud)
我有预感,必须有一个数据结构,但我找不到它.我已经尝试使用字典和格式化打印,我已尝试使用缩进的for循环,我已尝试打印为字符串.
我确信必须有一个非常简单的方法来做到这一点,但由于缺乏经验,我可能会错过它.
我想打印NumPy表格数组数据,以便它看起来不错.R和数据库控制台似乎表现出很好的能力.但是,NumPy的表格数组的内置打印看起来像垃圾:
import numpy as np
dat_dtype = {
'names' : ('column_one', 'col_two', 'column_3'),
'formats' : ('i', 'd', '|S12')}
dat = np.zeros(4, dat_dtype)
dat['column_one'] = range(4)
dat['col_two'] = 10**(-np.arange(4, dtype='d') - 4)
dat['column_3'] = 'ABCD'
dat['column_3'][2] = 'long string'
print(dat)
# [(0, 0.0001, 'ABCD') (1, 1.0000000000000001e-005, 'ABCD')
# (2, 9.9999999999999995e-007, 'long string')
# (3, 9.9999999999999995e-008, 'ABCD')]
print(repr(dat))
# array([(0, 0.0001, 'ABCD'), (1, 1.0000000000000001e-005, 'ABCD'),
# (2, 9.9999999999999995e-007, 'long string'),
# (3, 9.9999999999999995e-008, 'ABCD')],
# dtype=[('column_one', '<i4'), ('col_two', '<f8'), ('column_3', '|S12')])
Run Code Online (Sandbox Code Playgroud)
我希望看起来更像数据库吐出的东西,例如postgres风格: …
我有以下格式保存的数据(数字)(示例):
234 127 34 23 45567
23 12 4 4 45
23456 2 1 444 567
...
Run Code Online (Sandbox Code Playgroud)
是否有任何python方法来排列数字并将它们作为
234 127 34 23 45567
23 12 4 4 45
23456 2 1 444 567
Run Code Online (Sandbox Code Playgroud)
(我无法预测列大小).
在Python中打印表格数据的最佳方法是什么?假设数据在2D列表中,我想创建一个智能外观的表.我实际拥有的是一个字典列表,我想根据字典中的值打印一个交集.就像是
for val1 in my_dict:
for val2 in my_dict:
if val1['a'] > val2['a']:
print 'x'
Run Code Online (Sandbox Code Playgroud)
但是这样每个列的宽度都是固定的.Writer和格式化程序类似乎是可能性的东西,但与Perl的格式化程序相比,它仍然看起来很复杂.
是否有任何现有的实现或我必须自己编写?
TL; DR - > PyPi上是否有一个表写模块(我找不到),它将列表作为参数并从这些列表中创建一个表.我问这个是因为我看过PyPI,但是我没有发现任何类似于实际打印字符串或将字符串写入文件的内容.
想象一下,有很多统计数据,并且不得不把它们整齐地写在一张桌子里,就像这样,(我一直在努力教一个关于不同排序算法之间差异的课程)(另外,请注意这个例子)这里给出的代码与下面给出的代码的输出不匹配.我简单地完成了这个,以便解释我想要的东西,而不是制作一个必须滚动的大块代码):
#########################
# LENGTH ||| TIME(s) #
#########################
# 0 ||| 0.00000 #
# 250 ||| 0.00600 #
# 500 ||| 0.02100 #
# 750 ||| 0.04999 #
# 1000 ||| 0.08699 #
# 1250 ||| 0.13499 #
# 1500 ||| 0.19599 #
# 1750 ||| 0.26900 #
# 2000 ||| 0.35099 #
#########################
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会写这样的东西保存到文件,如下所示.列表集,一个列表包含一组值,另一个列表包含另一组相应的值.
if __name__ == '__main__':
with open(os.path.join(os.path.dirname(__file__), 'Sort Stats', 'stats_exp.txt'), 'w') as stats:
stats.write(
"O-######################==#######################==#######################==######################-O\n")
stats.writelines(
"|{0:^23}||{1:^23}||{2:^23}||{3:^23}|\n".format("Bubble Sort", "Insertion Sort", "Merge …Run Code Online (Sandbox Code Playgroud) 如果我有三个列表,如
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
并希望像这样打印出来
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我有这个列表清单:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
Run Code Online (Sandbox Code Playgroud)
我必须转换成这个表:
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
Run Code Online (Sandbox Code Playgroud)
对我来说,诀窍是将"线"转换成列(即苹果,橙子,樱桃,同一列下的香蕉)
我尝试过不同的选择(A):
for row in tableData:
output = [row[0].ljust(20)]
for col in row[1:]:
output.append(col.rjust(10))
print(' '.join(output))
Run Code Online (Sandbox Code Playgroud)
选项(B):
for i in tableData:
print( i[0].ljust(10)+(str(i[1].ljust(15)))+(str(i[2].ljust(15)))+
(str(i[3].ljust(15))))
Run Code Online (Sandbox Code Playgroud)
似乎没有人能解决这个问题.
在此先感谢您的任何建议.