gpt4 book ai didi

python - 动态构建字符串 'string' .format()

转载 作者:行者123 更新时间:2023-12-01 05:26:53 24 4
gpt4 key购买 nike

我正在尝试编写一个打印各种尺寸的表格的函数。我的方式可能不是最好的尝试,但也差不多了。

最后一个难题是使用可变数量的输入行创建字符串。由于 .format() 需要 .format(s1, s2, s3) 形式的输入,并且不采用 .format( (line) 中的列表) 我很难让这项工作适用于可变数量的列。有没有什么方法可以做到这一点(在 2.7 中),而不需要像 eval 这样的暴力尝试?我总是宁愿在无效时不使用它们。

def print_table(self, lines, sum_columns = [], extra_width = 5):
maxLength = [0] * len(lines)

for line in lines:
maxLength = [max(l1,l2) for l1, l2 in zip(maxLength, [len(str(l)) for l in line])]
if sum_columns:
total = [0] * len(lines)
for line in lines:
for c in sum_columns:
total[c-1] += line[c-1]
string = ''
for c in xrange(len(maxLength)): string = string + '{%s:%s} ' %(c, maxLength[c] + extra_width)
string = string[:-1]
print string
for line in lines:
print string.format(XXXXXXXXX)

最佳答案

您有多种选择:

  1. 格式化列表中的每个元素,然后使用str.join()将这些元素连接成一个更长的字符串:

    ''.join(['{0:{1}}'.format(c, width + extra) for c, width in zip(line, maxLength)])
  2. 构建动态格式字符串(连接各个 {} 部分),然后使用 *args splat 语法将该列表作为参数序列应用。

    template = ''.join(['{%(i)s:{widths[%(i)s]}}' % {'i': i} for i in range(len(maxLength))])
    for line in lines:
    print template(*line, widths=maxLength)

稍微简化你的代码:

def print_table(self, lines, sum_columns=None, extra_width=5):
columns = zip(*lines)

widths = [max(len(str(l)) for l in column) for column in columns]

for line in lines:
print ''.join(['{0:{1}}'.format(c, w + extra_width) for c, w in zip(line, widths)])

if sum_columns is not None:
totals = [sum(columns[i]) if i + 1 in sum_columns else 0 for i in range(len(columns))]
print ''.join(['{0:{1}}'.format(c, w + extra_width) for c, w in zip(totals, widths)])

关于python - 动态构建字符串 'string' .format(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21185483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com