2016-12-13 77 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的實際問題是以這種方式傳播的。 –