如何正确迭代和设置样式

时间:2016-12-13 18:12:41

标签: python

numbers = [ [([random.randint(1, 25)]) for col in range(5) ] for row in range(5)]  

我想像表格列和行一样打印出来: 这就是我想要的,但没有[]。

 ''' [
        [[13], [8], [2], [5], [17]],
        [[18], [9], [10], [16], [23]],
        [[5], [16], [7], [6], [11]],
        [[7], [7], [24], [10], [24]],
        [[1], [4], [17], [22], [13]]
    ] '''

我想要

   '''
        13  8   2    5    17
        18  9   10   16   23
        5   16  7    6    11
        7   7   10   24   10 
        1   4   17   22   13 
    '''

然后,如果randint返回10个不同的数字,如果上面的列表中存在任何这些,那么它应该如下所示:

   '''
        13  8   2    5    17
        [18]  9   10   16   23
        5   16  7    6    11
        7   7   [10]   24   10 
        1   4   17   22   13 
    '''

3 个答案:

答案 0 :(得分:5)

这是使用itertools

的快捷方式
import itertools

numbers = [ [([random.randint(1, 25)]) for col in range(5) ] for row in range(5)]  
for i in numbers:
    print(*itertools.chain.from_iterable(i))

打印

11 7 20 16 8
2 16 22 18 10
17 3 17 3 5
24 13 16 12 7
25 9 6 5 19

如果您知道每行有五个元素可以

for i in numbers:
    print('{:<2} {:<2} {:<2} {:<2} {:<2}'.format(*itertools.chain.from_iterable(i)))

打印

11 7  20 16 8
2  16 22 18 10
17 3  17 3  5
24 13 16 12 7
25 9  6  5  19

要打印任意长度的行,我们可以

for i in numbers:
    print(('{:<3} '*len(i)).format(*itertools.chain.from_iterable(i)))

哪个有类似的输出

答案 1 :(得分:-1)

我想我误解了你的意思&#34;没有方括号&#34;。如果将其保留为单元素列表的2D列表,则它看起来像这样。显然你可以在&#34; join&#34;的开头更改分隔符。声明你想要的任何东西。

>>> numbers = [ [([random.randint(1, 25)]) for col in range(5) ] for row in range(5)]
>>> for row in numbers:
...     print ", ".join([ elem[0] for elem in row ])
7, 14, 14, 6, 2
25, 22, 22, 16, 8
13, 11, 3, 2, 21
24, 17, 22, 16, 18
7, 6, 20, 4, 20

答案 2 :(得分:-1)

如果您拥有numpy套餐,则可以更轻松地生成数字:

numbers = numpy.random.randint(1, 26, size=[5,5])

注意独占上限26,相当于在random.randint中将包含上限设置为25。另请注意,这会生成一个5x5数组,而从字面上看,您的定义会创建一个5x5x1数组。如果您真正打算在numbers的定义中使用最里面的括号,请传递size=[5,5,1]而不是[5,5]

无论您是否使用numpy,以下是打印5x5版本的方法:

print('\n'.join(' '.join('%3d' % number for number in row) for row in numbers))

这是一种打印5x5x1版本的方法:

print('\n'.join(' '.join('%3d' % seq[0] for seq in row) for row in numbers))

无论哪种方式,这是一个示例输出:

 21   3  15  19  25
  5  12  13   7  16
 21  24   7   5   1
 11   6  18   1  19
 18   7  20  14   8