Transposing a 3D list in Python

后端 未结 2 1623
遇见更好的自我
遇见更好的自我 2021-01-18 22:21

I have to transpose a 3d list the following way:

Input:

matrix7 = [[[\'A \', \'E \', \'C#\'], [\'B \', \'E \', \'C#\'], [\'C \', \'E \', \'C#\']], 
[         


        
相关标签:
2条回答
  • 2021-01-18 22:45

    I think this is what you want:

    numpy.transpose(matrix7, axes=(1, 0, 2)).tolist()  # The 'axes' attribute tells transpose to swaps axes 0 and 1, leaving the last one alone.
    

    OUTPUT:

    [[['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
    [['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
    [['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']]]
    
    0 讨论(0)
  • 2021-01-18 23:03

    You don't actually need numpy for this:

    >>> [list(x) for x in zip(*matrix7)]
    [[['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
     [['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
     [['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']]]
    

    Or, if you don't mind getting a list of tuples of lists, just:

    >>> list(zip(*matrix7))
    [(['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
     (['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
     (['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#'])]
    

    Or, in Python 2.x, even less:

    >>> zip(*matrix7)
    [(['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
     (['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
     (['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#'])]
    
    0 讨论(0)
提交回复
热议问题