2015-12-10 48 views
0

我找蟒蛇矩陣oneliner將創建矩陣給定的順序,從1填充值到n。 N = [R XÇ蟒蛇ONELINE創建的給定的順序

我實現這個錢櫃,

Matrix1 = [[x+1 for x in range(rowCount)] for x in range(columnCount)] 
print Matrix1 

但輸出

[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
+0

我只是好奇......爲什麼把一個班輪的約束? – KronoS

+0

我只想知道這是可能的與一條線! – karthikeayan

+0

我只是發現一切都很迂腐,並不是真正值得努力的一個班輪的整個目標。 – KronoS

回答

1
>>> matrix1 = [[1+x+y*rowCount for x in range(rowCount)] for y in range(columnCount)] 
>>> matrix1 
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
+0

當我把行數= 10,列計數= 3,它給我: 在[29]中:[[1 + x + y * r對於範圍(r)中的x]對於範圍(c)中的y] 輸出[29]: [[1,2,3,4,5,6,7,8,9,10], [11,12,13,14,15,16,17,18,19,20], [21 ,22,23,24,25,26,27,28,29,30]' 我不應該會得到10行,而不是3? –

+0

您_are_越來越十行...如果你解釋將R結果是專欄而不是專業。如果你想是後者,你可以做'[[1個+ X + Y *的信息columnCount(信息columnCount)]×範圍內y的範圍內(rowCount時)]' – Kevin

1

可以使用相同的變量爲你的兩個循環。試試這個:

matrix1 = [[y*rowCount + x + 1 for x in range(rowCount)] for y in range(columnCount)] 
print matrix1 
+0

產生'[[0,0,0],[0,1,2],[0,2,4]]'而不是所需的[[1,2,3],[4 ,5,6],[7,8,9]]'。 – Kevin

+0

Oups你是對的。固定它 – TheWalkingCube

2

不,正確的做法是沒有環路(在同一行):

import numpy as np 

rowCount = 2 
colCount = 5 

np.array(range(1, 1+rowCount*colCount)).reshape(rowCount,colCount) 

#array([[ 1, 2, 3, 4, 5], 
#  [ 6, 7, 8, 9, 10]]) 
+0

了對「無循環」的解決方案 –

+0

這是偉大的解決方案,而且我沒有任何模塊在尋找一種方式:( – karthikeayan

+0

不幸的是,你真的應該使用numpy的用於處理矩陣! –

1

鑑於c(列數),n,這裏就是我想出了:

[range(0, n)[cx:cx+c] for cx in range(0, n, c)] 

結果:

In [16]: n = 9 

In [17]: c = 3 

In [18]: [range(0, n)[cx:cx+c] for cx in range(0, n, c)] 
Out[18]: [[0, 1, 2], [3, 4, 5], [6, 7, 8]] 

編輯:對於非方陣更多的例子: (mod是我創建迅速改變rc價值,並從中計算n功能)

In [23]: mod(8, 2) # 8 rows, 2 columns 

In [24]: [range(0, n)[cx:cx+c] for cx in range(0, n, c)] 
Out[24]: [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15]] 

In [25]: mod(3, 6) # 3 rows, 6 columns 

In [26]: [range(0, n)[cx:cx+c] for cx in range(0, n, c)] 
Out[26]: [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17]] 

In [27]: mod(10, 3) # 10 rows, 3 columns 

In [28]: [range(0, n)[cx:cx+c] for cx in range(0, n, c)] 
Out[28]: 
[[0, 1, 2], 
[3, 4, 5], 
[6, 7, 8], 
[9, 10, 11], 
[12, 13, 14], 
[15, 16, 17], 
[18, 19, 20], 
[21, 22, 23], 
[24, 25, 26], 
[27, 28, 29]] 

它適用於他們。

+0

我認爲這隻能用於方陣 – karthikeayan

+0

@karthikeayan它的工作原理也適用於非矩陣矩陣。用這些例子查看我的更新答案。同時,對於'rowCount = 10'和'columnCount = 3',選擇的答案沒有給出正確的答案。它給出了這個:在[29]中:[[1 + x + y * r對於範圍(r)中的x]對於範圍(c)中的y] Out [29]: [[1,2,3,4 ,5,6,7,8,9,10], [11,12,13,14,15,16,17,18,19,20], [21,22,23,24,25,26 ,27,28,29,30]] –