转换3d列表(Python)
如何转换3d列表转换3d列表(Python),python,Python,如何转换3d列表m4c,以获得所需的输出 m4c = [[['A ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], ['B ', ' ', ' ', ' '], ['C ', ' ', ' ', ' ', ' ', ' ', ' ', ' \n']], [['E ', 'F#', 'E ', 'E ', 'F#', 'E ', ' ', 'E '], ['E ', 'F#', 'E ', 'E '], ['E ', 'F#',
m4c
,以获得所需的输出
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 ']]]
这看起来与我期望的输出基本匹配:
>>> pprint(m4c)
[[['A ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
['B ', ' ', ' ', ' '],
['C ', ' ', ' ', ' ', ' ', ' ', ' ', ' \n']],
[['E ', 'F#', 'E ', 'E ', 'F#', 'E ', ' ', 'E '],
['E ', 'F#', 'E ', 'E '],
['E ', 'F#', 'E ', 'E ', 'F#', ' ', 'E ', 'F#']]]
>>> trans = list(zip(*x) for x in zip(*m4c))
>>> pprint(trans)
[[('A ', 'E '),
(' ', 'F#'),
(' ', 'E '),
(' ', 'E '),
(' ', 'F#'),
(' ', 'E '),
(' ', ' '),
(' ', 'E ')],
[('B ', 'E '), (' ', 'F#'), (' ', 'E '), (' ', 'E ')],
[('C ', 'E '),
(' ', 'F#'),
(' ', 'E '),
(' ', 'E '),
(' ', 'F#'),
(' ', ' '),
(' ', 'E '),
(' \n', 'F#')]]
我不知道您的
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]))]
该线程是我的,但我不知道如何转换一般(我有多个输入列表)。