1

Pythonで2D配列やリストなどを作成しようとしています。私はこの言語に非常に慣れていないので、すべてのインとアウト、およびさまざまなタイプやライブラリを知っているわけではありません。

基本的に、リストの正方形のリストgがあり、それを転置したいと思います(行を列に、列を行に変換します)。後で、このリストのリストと転置されたリストのリストをトラバースします。転置リストでは、列の順序は重要ではありません。これは「Pythonの方法」ですか?これを行うためのはるかに速い方法はありますか?

私が知っている言語の配列に非常に似ている構文に慣れているので、リストを使用するのが好きですが、Pythonでより良い方法があれば、それを学びたいと思います。

def makeLRGrid(g):
    n = []
    for i in range(len(g)):
        temp = []
        for j in range(len(g)):
            temp.append(g[j][i])
        n.append(temp)
    return n

あなたが提供できるどんな助けにも感謝します!

編集:混乱して申し訳ありませんが、どうやら私は転置を意味し、反転ではありません!

4

4 に答える 4

4

この実装は、リストの「正方形」リストの場合と同じように機能します。

def makeLRGrid(g):
    return [row[:] for row in g]

リストは、リスト全体をでスライスすることでコピー[:]できます。リスト内包表記を使用して、すべての行に対してこれを行うことができます。

編集:あなたは実際にリストのリストを転置することを目指しているようです。これは次の方法で実行できますzip()

def transpose(g):
    return zip(*g)

または、リストのリストが本当に必要な場合

def transpose(g):
    return map(list, zip(*g))

のドキュメントzip()も参照してください。

于 2012-06-15T14:48:40.627 に答える
4

数値プログラミングには、 NumPy(および関連するSciPy)を強くお勧めします。NumPyは非常に高速な多次元配列を実装しています。利用可能な配列操作ルーチンについては、こちらをご覧ください。

于 2012-06-15T14:51:21.323 に答える
2

クリスのコメントに追加するために、私は本当にnumpyを十分に推薦することはできません。あなたはそれが1つのプロジェクトのためであると言います、しかしあなたはたぶん一度だけいくつかの(単純な)構文を学ぶためにそれを何度も利用するでしょう。

たとえば、リストのリストがある場合g:

g = [[1,2,3],[4,5,6],[7,8,9]]

これは、次の方法で配列にすることができます。

>>> import numpy as np
>>> g_array = np.array(g)
>>> g_array
array([[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]])

簡単にアイテムにアクセスできます。

>>> g_array[0,1]
2
>>> g_array[1,2]
6

そして、次のようにして「反転」を実行します(実際には転置-つまり、行1が各行の列1になります)。

>>> g_transpose = g_array.transpose() # or  = g_array.T from Simon's comment
>>> g_transpose
array([[1, 4, 7],
      [2, 5, 8],
      [3, 6, 9]])
于 2012-06-15T15:15:01.963 に答える
1

invert the list of listsはこのようなものだと思います:

g = [[1,2,3], [4,5,6], [7,8,9]]
result = [p[::-1] for p in g]
print result

出力:</ p>

[[3,2,1], [6,5,4], [9,8,7]]

多分私は心配しています。例を挙げていただけますか?

編集: コメントの例

result = [list(p) for p in zip(*g)]
print result

出力:

[[1,4,7], [2,5,8], [3,6,9]]
于 2012-06-15T15:01:59.600 に答える