2017-06-08 19 views
1

私はPythonで(ほぼ)リストのリストを作成します(私はそれを2次元配列と呼びます)。代わりに、この3回0-6から上がっていくと、繰り返しの2次元配列にデータを取り込む方法は?

は、私はそれが数字の配列を移入したい0 - 20を参照してください以下のコード:

#matrix=[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21] 
#print(matrix[1][2]) 

rows=3 
columns=7 

for i in range(rows): 
    for j in range(columns): 
    matrix=[j] 
    i=i+1  
    print(matrix,end="") 

誤った出力は次のようになります。

[0][1][2][3][4][5][6][0][1][2][3][4][5][6][0][1][2][3][4][5][6] 

私は出力になりたい:

[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21] 

答えて

1

は手の込んだ方法がありますが、これが最も簡単です:

>>> rows = 3 
>>> columns = 7 
>>> n = 1 
>>> matrix = [] 
>>> for _ in range(rows): 
...  sub = [] 
...  for _ in range(columns): 
...   sub.append(n) 
...   n += 1 
...  matrix.append(sub) 
... 
>>> matrix 
[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21]] 

そして、良い対策のため、派手な道:

>>> import itertools 
>>> counter = itertools.count(1) 
>>> rows = 3 
>>> columns = 7 
>>> matrix = [[n for n, _ in zip(counter, range(columns))] for _ in range(rows)] 
>>> matrix 
[[1, 2, 3, 4, 5, 6, 7], [9, 10, 11, 12, 13, 14, 15], [17, 18, 19, 20, 21, 22, 23]] 
>>> 
+0

ソリューションにコメントできますか。そのような_inの使用 - 私は前に出くわしたことがない。新しいサブリストを作成してそれを追加するかどうかは不必要に複雑に思えます。たとえば、VB.Netでは、これは簡単に行うことができます..... – MissComputing

+1

'_'は単に' foo'と同じように他の変数名と同じです。しかし、慣習的には* throwaway変数に使用されます。つまり、実際には使用しません。そして、そうです、それは*ちょうど 'サブ'がやっていることです。 Pythonリストは多次元配列ではなく*リスト*です。配列のような機能を使いたい場合は、 'numpy.ndarray'のような*実際の配列*を使用してください。単純に' matrix = numpy.arange(rows * columns).reshape(rows、columns) ' –

+0

ありがとうございます。要件の一部として配列を使用できる(教えるために)numpyを使用する必要があるかもしれません。あなたが言うように、Pythonは単語の本当の意味での配列の使用をサポートしていません(リストには異なる型の要素を含めることができます)。人々が「numpy」が初心者にとってあまりにも複雑すぎる/過度のものだと言っている理由はありますか?上記のオプションとリストの理解の使用よりも簡単に思えます。 – MissComputing

0

使用リストの内包。あなたはリストの理解の基礎が[for y in range(rows)]ですので、3行が欲しいです。 1から始まるように列で割り切れる数値から始まる数字を増やしたい場合は、range(columns*y+1,...)とし、列の範囲(7)をrange(columns*y+1,columns+(columns*y+1))にして、それをリストにしたいとします。

rows=3 
columns=7 

matrix=[list(range(columns*y+1,columns+(columns*y+1))) for y in range(rows)] 

print(matrix) 
#outputs: [[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21]] 
関連する問題