Python 格式列表

Python 格式列表,python,python-3.x,Python,Python 3.x,我需要创建一个函数,从用户处获取列表的输入,并按如下方式返回: >>> print_table([[0,1,2,3,4,5],[0,1,4,9,16,25],[0,1,8,27,64,125]]) 0 1 2 3 4 5 0 1 4 9 16 25 0 1 8 27 64 125 >>> print_table(times_table(6,6)) 0 0 0 0 0 0

我需要创建一个函数,从用户处获取列表的输入,并按如下方式返回:

>>> print_table([[0,1,2,3,4,5],[0,1,4,9,16,25],[0,1,8,27,64,125]])
0   1   2   3   4   5   
0   1   4   9   16  25  
0   1   8   27  64  125 
>>> print_table(times_table(6,6))
0   0   0   0   0   0   0   
0   1   2   3   4   5   6   
0   2   4   6   8   10  12  
0   3   6   9   12  15  18  
0   4   8   12  16  20  24  
0   5   10  15  20  25  30  
0   6   12  18  24  30  36
times_表引用了我的当前代码:

def times_table(s):
    n = int(input('Please enter a positive integer between 1 and 15: '))
    for row in range(n+1):
        s = ''
        for col in range(n+1):
                s += '{:3} '.format(row * col)
        print(s)

如果您可以帮助我……

要从用户处获取两个输入值,即列数和行数,您可以执行以下操作:

in_values = input('Please enter two positive integers between 1 and 15, separated by comma (e.g. 2,3): ')
m,n =  map(int, in_values.split(','))
print(m,n)

<>要打印一个格式化列表列表,您可能希望考虑通过字符串格式()方法使用字符串格式。在上面的例子中我注意到的一点是,你只能得到3位数字,而数字之间的间隔似乎是不变的。对于数字较大的列表,这可能会弄乱表的格式。通过使用format()方法,您可以将这一点考虑在内,并使表格保持良好的间距

我能想到的实现这一点的最简单方法是确定整个列表中最大的一个数字(大多数数字),然后将其合并到格式中。我建议您阅读python类型字符串的字符串格式(包括迷你格式语言)

假设s是传递到print_表的参数:

maxchars = len(str(max(max(s))))
这将在列表中的单个条目中提供最大数量的字符。然后,您可以在for循环中的行格式化中使用此数字:

for lst in l:
        output = ""
        for i in lst:
            output += "{0:<{1}} ".format(i, maxchars)
        print(output)
但是,如果数字大得多(或者任何一个数字大得多,例如125被125125替换,很不幸,它会是这样的,因为它用适当数量的字符空间填充每个项目,以包含6个字符:

0      1      2      3      4      5      
0      1      4      9      16     25     
0      1      8      27     64     125125
上面的示例考虑了可变数量的字符,但是您也可以使用整数格式化字符串,方法是将{1}替换为整数,并省略maxchars部分(包括设置它和将它传递到format),如果这足够的话

output += "{0:<4} ".format(i)

output+=”{0:实际问题是什么?我不知道如何将元组作为输入,以及如何像示例一样格式化输出。不清楚您的最终目标是什么,但您可能想看看
numpy
pandas
。例如,您的
时间表可以使用
numpy.outer
pandas
创建为漂亮的打印提供了很好的选项。实际上,最好是将每个格式化字符串附加到列表中,然后只打印连接的最后一个字符串。我不喜欢使用连接,所以我总是忽略它。有没有人想过将输出从字符串更改为列表,而改为使用:output.append({0:
output += "{0:<4} ".format(i)