格式化列表

时间:2015-02-26 02:57:03

标签: 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   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_table指的是我当前的代码:

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)

如果你能帮助我......

2 个答案:

答案 0 :(得分:1)

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

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)

答案 1 :(得分:1)

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

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

假设s是传递给print_table的参数:

maxchars = len(str(max(max(s))))

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

for lst in l:
        output = ""
        for i in lst:
            output += "{0:<{1}} ".format(i, maxchars)
        print(output)

行输出+ =&#34; {0:&lt; {1}}&#34; .format(i,maxchars)表示打印数字({0}映射到格式调用中的i )在字符空间中调整(&lt;)&lt; maxchars&#34;宽({1}映射到格式调用中的maxchars)。

因此,根据上面的列表列表,它将打印为:

0   1   2   3   4   5   
0   1   4   9   16  25  
0   1   8   27  64  125 

但是如果数字要大得多(或者任何数字都要大得多,例如125被替换为125125,那么遗憾的是它会是这样的,因为它用每个项目填充适当数量的字符空间来包含6个字符:

0      1      2      3      4      5      
0      1      4      9      16     25     
0      1      8      27     64     125125

上面的示例考虑了可变数量的字符,但是您也可以使用整数格式化字符串,方法是将{1}替换为整数并省略maxchars部分(包括设置它并将其传递给格式)如果这就足够了。

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

或者,你可以弄清楚如何确定给定列中的最大数字,然后恰当地格式化该列,但是我不打算将其放在这个答案中。