2

Python でリストを生成するには、次のようなものを使用できることを知っています。

l = [i**2 for i in range(5)]

次のような for ループを使用する代わりに:

l = []
for i in range(5):
    l.append(i**5)

次のような for ループを使用せずに 2D リストを作成する方法はありますか。

map = [[]]

for x in range(10):
    row = []
    for y in range(10):
        row.append((x+y)**2)
    map.append(row)

Python で 2D 配列を表す他の方法はありますか?

4

3 に答える 3

9

ここでもリスト内包表記を使用します。

>>> [ [(x+y)**2 for y in range(10)] for x in range(10)]
[[0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [1, 4, 9, 16, 25, 36, 49, 64, 81, 100], [4, 9, 16, 25, 36, 49, 64, 81, 100, 121], [9, 16, 25, 36, 49, 64, 81, 100, 121, 144], [16, 25, 36, 49, 64, 81, 100, 121, 144, 169], [25, 36, 49, 64, 81, 100, 121, 144, 169, 196], [36, 49, 64, 81, 100, 121, 144, 169, 196, 225], [49, 64, 81, 100, 121, 144, 169, 196, 225, 256], [64, 81, 100, 121, 144, 169, 196, 225, 256, 289], [81, 100, 121, 144, 169, 196, 225, 256, 289, 324]]
于 2013-06-19T18:16:50.597 に答える
2

これを行うより効率的な方法は、numpy.meshgrid() を使用することです。ここに例があります:

i = np.arange(1,10)
I,J = np.meshgrid(i,i)
array = (I+J)**2

配列には目的の形式があります。

メソッドとメッシュグリッドのパフォーマンスを比較できます。Meshgrid は C で実装されているため、非常に高速です。

配列からのリストが必要な場合は、array.tolist() メソッドを使用できます。

于 2013-06-20T15:24:22.793 に答える
0

Python の科学計算パッケージであるnumpyを使用して nd 配列を実装することも検討してください。Numpy 配列オブジェクトには、ネストされたリストよりもいくつかの利点があります。

  • たとえば、nd 配列のスライス ( numpy のドキュメントから取得):

    x = np.array([[1, 2, 3], [4, 5, 6]], np.int32) #creates the array
    x[:,1] # returns the first column
    
  • 転置、形状変更、サイズ変更などの方法で nd 配列を簡単に操作できます。

  • 配列に対する数学演算の簡単な実装。

もちろん、これは実際に必要とするよりも多くの機械である可能性があるため、ネストされたリストの理解が目的に十分である場合があります。

于 2013-06-19T19:27:47.227 に答える