Функция Zip с массивами в Python - PullRequest
0 голосов
/ 26 мая 2020

У меня есть 2D-массив и 3D-массив. Я пытаюсь соединить их вместе.

Это код.

data1 = [
    [1, 1.0, 1.5, 500, 0.0, 0.0, ([[1, 2],[3, 4]])],
    [1, 1.0, 1.5, 500, 0.0, 0.5, ([[2, 3],[4, 5]])],
    [1, 1.5, 1.5, 500, 0.0, 0.0, ([[300, 499],[577, 699]])],
    [1, 1.5, 1.5, 500, 0.0, 0.5, ([[477, 599],[644, 788]])]
]

data2 = [
    [[0, 0, 90], [2, 3, 5]],
    [[4, 7, 8], [8, 4, 6]]
]


combination = [[(k, l) for k, l in zip(data1, row)] for row in data2]

print(combination)

Результат:

[[([1, 1.0, 1.5, 500, 0.0, 0.0, [[1, 2], [3, 4]]], [0, 0, 90]), 
  ([1, 1.0, 1.5, 500, 0.0, 0.5, [[2, 3], [4, 5]]], [2, 3, 5])], 
 [([1, 1.0, 1.5, 500, 0.0, 0.0, [[1, 2], [3, 4]]], [4, 7, 8]), 
  ([1, 1.0, 1.5, 500, 0.0, 0.5, [[2, 3], [4, 5]]], [8, 4, 6])]]

Но я пытаюсь получить:

[[([1, 1.0, 1.5, 500, 0.0, 0.0, [[1, 2], [3, 4]]], [0, 0, 90]), 
  ([1, 1.0, 1.5, 500, 0.0, 0.5, [[2, 3], [4, 5]]], [2, 3, 5])], 
 [([1, 1.5, 1.5, 500, 0.0, 0.0, [[300, 499],[577, 699]]], [4, 7, 8]), 
  ([1, 1.5, 1.5, 500, 0.0, 0.5, [[477, 599],[644, 788]]], [8, 4, 6])]]

Как могу ли я отредактировать свой код для этого? Спасибо !!!

1 Ответ

1 голос
/ 26 мая 2020

Используйте iter + zip

it=iter(data1)
[list(zip(*l)) for l in zip(zip(it,it), data2)]

Вывод:

[[([1, 1.0, 1.5, 500, 0.0, 0.0, [[1, 2], [3, 4]]], [0, 0, 90]),
  ([1, 1.0, 1.5, 500, 0.0, 0.5, [[2, 3], [4, 5]]], [2, 3, 5])],
 [([1, 1.5, 1.5, 500, 0.0, 0.0, [[300, 499], [577, 699]]], [4, 7, 8]),
  ([1, 1.5, 1.5, 500, 0.0, 0.5, [[477, 599], [644, 788]]], [8, 4, 6])]]
...