如何格式化(对齐)可变数量的数据
How to format(align) a variable amount of data
我正在尝试将数据格式化为一定数量的空格,如果它是严格数量的输入,这将非常简单,但它可能会有所不同。
例如,这是我的:
for i in LongPerEq:
string = string + '%' + str(i) + 's '
# Where string is now '%6s %8s %9s'
line1 = string % (equations[0][0], equations[1][0], equations[2][0])
return(line1)
如您所见,我能够将 'string' 变量变成一个字符串,可以正确对齐它们,而且它不取决于我想要的 'equations' 的数量采用。所以那部分很好。问题是我有
的部分
% (equations[0][0], equations[1][0], equations[2][0])
这是一个问题,因为它只能用于 3 个方程。它应该可用于 1、2、4 和 5。
希望这解释了我遇到的问题...任何帮助将不胜感激!
这可能是一个分为两部分的答案。第一部分是如何使传递给格式运算符“%”的元组更加灵活。这是一些示例代码:
equations = [ [ 1,2,3] , [4,5,6] , [7,8,9], [10,11,12] ]
string = "%6s %8s %9s"
line1 = string % ( equations[0][0], equations[1][0], equations[2][0] )
print(line1)
# Here I am illustrating that this works for arbitrary sized equations list
string = "%6s %8s %9s %11s"
line2 = string % tuple( e[0] for e in equations )
print(line2)
在上面,您可以看到我们从方程的所有第一个元素动态构建格式元组。
不过,您可以考虑按如下所示连接行:
不确定是否可以枚举LongPerfEq
,所以我写了这个片段:
ndx = 0
line1 = ""
for i in LongPerfEq:
string = '%' + str(i) + 's '
line1 += string % (equations[ndx])
ndx += 1
return(line1)
或者,如果 enumerate 对你有用,你可以避免添加 ndx
初始化器和增量器:
line1 = ""
for ndx,i in enumerate(LongPerfEq):
string = '%' + str(i) + 's '
line1 += string % (equations[ndx])
return(line1)
也许您可能想查看 string.format()。
由于 format() 是一个函数,您可以将参数解压缩到其中(而不是创建一个元组来传递给 % 运算符)。
这是一个例子:
string="{0:>6s} {1:>8s} {2:>9s} {3:>11s}"
print( string.format( *[ e[0] for e in equations ] ) )
我们使用列表理解来 select 方程的每个成员的 0 元素,然后我们使用 *
解压列表,所以现在格式将每个列表元素作为参数。
当我使用新格式语法(即 {0:>6s} 与 %6s )时,我观察到字符串默认左对齐,所以我添加了 >
说明符来获取它右对齐。格式 {0:>6s}
表示,取第一个(第 0 个)元素并将其格式化为至少六个字符的右对齐字符串。
我正在尝试将数据格式化为一定数量的空格,如果它是严格数量的输入,这将非常简单,但它可能会有所不同。 例如,这是我的:
for i in LongPerEq:
string = string + '%' + str(i) + 's '
# Where string is now '%6s %8s %9s'
line1 = string % (equations[0][0], equations[1][0], equations[2][0])
return(line1)
如您所见,我能够将 'string' 变量变成一个字符串,可以正确对齐它们,而且它不取决于我想要的 'equations' 的数量采用。所以那部分很好。问题是我有
的部分 % (equations[0][0], equations[1][0], equations[2][0])
这是一个问题,因为它只能用于 3 个方程。它应该可用于 1、2、4 和 5。 希望这解释了我遇到的问题...任何帮助将不胜感激!
这可能是一个分为两部分的答案。第一部分是如何使传递给格式运算符“%”的元组更加灵活。这是一些示例代码:
equations = [ [ 1,2,3] , [4,5,6] , [7,8,9], [10,11,12] ]
string = "%6s %8s %9s"
line1 = string % ( equations[0][0], equations[1][0], equations[2][0] )
print(line1)
# Here I am illustrating that this works for arbitrary sized equations list
string = "%6s %8s %9s %11s"
line2 = string % tuple( e[0] for e in equations )
print(line2)
在上面,您可以看到我们从方程的所有第一个元素动态构建格式元组。
不过,您可以考虑按如下所示连接行:
不确定是否可以枚举LongPerfEq
,所以我写了这个片段:
ndx = 0
line1 = ""
for i in LongPerfEq:
string = '%' + str(i) + 's '
line1 += string % (equations[ndx])
ndx += 1
return(line1)
或者,如果 enumerate 对你有用,你可以避免添加 ndx
初始化器和增量器:
line1 = ""
for ndx,i in enumerate(LongPerfEq):
string = '%' + str(i) + 's '
line1 += string % (equations[ndx])
return(line1)
也许您可能想查看 string.format()。
由于 format() 是一个函数,您可以将参数解压缩到其中(而不是创建一个元组来传递给 % 运算符)。
这是一个例子:
string="{0:>6s} {1:>8s} {2:>9s} {3:>11s}"
print( string.format( *[ e[0] for e in equations ] ) )
我们使用列表理解来 select 方程的每个成员的 0 元素,然后我们使用 *
解压列表,所以现在格式将每个列表元素作为参数。
当我使用新格式语法(即 {0:>6s} 与 %6s )时,我观察到字符串默认左对齐,所以我添加了 >
说明符来获取它右对齐。格式 {0:>6s}
表示,取第一个(第 0 个)元素并将其格式化为至少六个字符的右对齐字符串。