0

m4c目的の出力が得られるように、3d リストを転置するにはどうすればよいですか?

m4c = [[['A ', '  ', '  ', '  ', '  ', '  ', '  ', '  '], ['B ', '  ', '  ', '  '], ['C ', '  ', '  ', '  ', '  ', '  ', '  ', '  \n']],    [['E ', 'F#', 'E ', 'E ', 'F#', 'E ', '  ', 'E '], ['E ', 'F#', 'E ', 'E '], ['E ', 'F#', 'E ', 'E ', 'F#', '  ', 'E ', 'F#']]]

望ましい出力:

[[['A ','E '], ['  ','F#'], ['  ','E '], ['  ','E '], ['  ','F#'], ['  ','E '], ['  ','  '], ['  ','E ']], 
 [['B ','E '], ['  ','F#'], ['  ','E '], ['  ','E ']],
 [['C ','E '], ['  ','F#'], ['  ','E '], ['  ','E '], ['  ','F#'], ['  ','E '], ['  ','  '], ['  ','E ']]]
4

2 に答える 2

1

m4c[0][2]あなたが正しいかどうかはわかりません: ['C ', ' ', ' ', ' ', ' ', ' ', ' ', ' \n']、しかし、それとタプルが問題ない場合、簡単な解決策は次のとおりです。

>>> [zip(m4c[0][i], m4c[1][i]) for i in range(len(m4c[0]))]
[[('A ', 'E '), ('  ', 'F#'), ('  ', 'E '), ('  ', 'E '), ('  ', 'F#'), ('  ', 'E '), ('  ', '  '), ('  ', 'E ')],\
 [('B ', 'E '), ('  ', 'F#'), ('  ', 'E '), ('  ', 'E ')], \
 [('C ', 'E '), ('  ', 'F#'), ('  ', 'E '), ('  ', 'E '), ('  ', 'F#'), ('  ', '  '), ('  ', 'E '), ('  \n', 'F#')]]

またはより一般的に:

>>> [zip(*[m4c[j][i] for j in range(len(m4c))]) for i in range(len(m4c[0]))]
于 2013-08-16T15:56:15.470 に答える