1

マトリックス

同じ長さのリストのリストです。次の形式の辞書を返す必要があります

{i:(l1[i],l2[i],...,lm[i])}

キー i は、各リストの i 番目の要素のタプルと一致します。言う

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

だから行:

>>> dict([(i,tuple(matrix[k][i] for k in xrange(len(matrix)))) for i in xrange(len(matrix[0]))])

仕事はかなりうまくいき、出力します:

{0: (1, 9, 4), 1: (2, 8, 8), 2: (3, 7, 2), 3: (4, 6, 6)}

ただし、行列が空の場合は失敗します: matrix=[]. 出力は次のようになります。{}

どうすればこれに対処できますか?

4

3 に答える 3

5

代わりにこれはどうですか?

>>> matrix = [[1,2,3,4],[9,8,7,6],[4,8,2,6]]
>>> dict(enumerate(zip(*matrix)))
{0: (1, 5, 4), 3: (4, 8, 6), 2: (3, 7, 2), 1: (2, 6, 8)}    
>>> matrix = []
>>> dict(enumerate(zip(*matrix)))
{}
于 2012-06-01T22:36:03.990 に答える
4

部分「len(matrix [0])」を変更してみてくださいこれは、行列が空の場合に存在しないインデックスを検索しようとします。

代わりにそれを作る

len(matrix [0])if matrix else 0

于 2012-06-01T22:38:23.287 に答える
0

簡単な解決策が必要な場合 (自分の解決策の何が問題なのかを知る代わりに)、辞書の代わりにリストを使用することをお勧めします。マトリックスとして見ることは、そのサイズとキーに関してかなり静的です。

これは、次のように簡単に実行できます。zip(*matrix)

>>> matrix = [[1,2,3,4],[9,8,7,6],[4,8,2,6]]
>>> dict_ = dict(enumerate(zip(*matrix)))
>>> list_ = zip(*matrix)
>>> for key_ in dict_:
...     print dict_[key_] == list_[key_]
...
True
True
True
True
于 2012-06-02T03:37:26.143 に答える