Распаковать 2d список кортежей - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь распаковать двухмерный список кортежей.Все, что я пробовал до сих пор, не дает мне результатов

Это то, чего я пытаюсь достичь:

Input:  [[(-8, -8), (2, 0)], [(0, 2), (-1, -1)]]    

Output = [[-8, 2], [0, -1]], [[-8, 0], [2, -1]]

Я пробовал zip, как это, но это не работает.

a,b = zip(*matrixRow)

1 Ответ

1 голос
/ 25 марта 2019

вам нужно применить zip дважды, чтобы выполнить 2 транспонирования:

inlist = [[(-8, -8), (2, 0)], [(0, 2), (-1, -1)]]

print(list(zip(*(zip(*x) for x in inlist))))

результат:

[((-8, 2), (0, -1)), ((-8, 0), (2, -1))]

это дает tuples внутри, потому что zip создает их. Чтобы получить списки, это немного сложнее, потому что вам нужно конвертировать в list на 2 уровнях:

print([[list(z) for z in y] for y in zip(*(zip(*x) for x in inlist))])

печать:

[[[-8, 2], [0, -1]], [[-8, 0], [2, -1]]]
...