2016-12-13 35 views
-5
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 
    ''' 
+0

不确定你想在这里实现什么,打印出一张表? –

+0

为什么这么多嵌套列表?重点是什么? – acushner

+1

为什么不'从numpy进口随机; numbers = random.randint(1,25,size =(5,5,1))'获取数组? –

回答

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))) 

如果你有numpy包有生成的数字更简单的方式,也有类似的输出

+1

这看起来像是唯一的答案,不会改变数组的形状,并打印OP的方式要求 –

-1

我想我误解了你的意思是“没有方括号”。如果你把它保存为单元素列表的2D列表,它看起来像这样。显然你可以在“join”语句的开始处将分隔符更改为任何你想要的。

>>> 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 
+0

这不是我想要打印出来的东西。 – Noobe16

+0

一行一行,没有[]东西,像这样7 14 14 6 2 – Noobe16

+0

编辑删除方括号。 – nrlakin

-1

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

请注意独占上限26,相当于将包含上限设置为25在random.randint。还请注意,这会生成一个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 
+0

大小实际上是'5,5,1',而且在打印输出中没有括号。 –

+0

我不相信OP必然*想要*'数字'定义的方式,但无论如何:编辑 – jez

+0

第二个评论[本](http://stackoverflow.com/a/41127912/2988730)答案。不幸的是,OP的实际问题是以这种方式传播的。 –