Как выбрать один элемент из каждого подмассива 2D-массива в Python? - PullRequest
0 голосов
/ 09 ноября 2019

Таким образом, вы получаете только одну переменную в python:

array = [ [1,2,3], [4,5,6], [7,8,9], [10,11] ]

Вы хотите иметь возможность возвращать список массивов, содержащих только 1 элемент из каждого элемента этого array.

Поэтому в этом случае наш ответ будет следующим:

ans = [[1, 4, 7, 10], [1, 4, 7, 11], [1, 4, 8, 10], [1, 4, 8, 11], [1, 4, 9, 10], [1, 4, 9, 11], [1, 5, 7, 10], [1, 5, 7, 11], [1, 5, 8, 10], [1, 5, 8, 11], [1, 5, 9, 10], [1, 5, 9, 11], [1, 6, 7, 10], [1, 6, 7, 11], [1, 6, 8, 10], [1, 6, 8, 11], [1, 6, 9, 10], [1, 6, 9, 11], [2, 4, 7, 10], [2, 4, 7, 11], [2, 4, 8, 10], [2, 4, 8, 11], [2, 4, 9, 10], [2, 4, 9, 11], [2, 5, 7, 10], [2, 5, 7, 11], [2, 5, 8, 10], [2, 5, 8, 11], [2, 5, 9, 10], [2, 5, 9, 11], [2, 6, 7, 10], [2, 6, 7, 11], [2, 6, 8, 10], [2, 6, 8, 11], [2, 6, 9, 10], [2, 6, 9, 11], [3, 4, 7, 10], [3, 4, 7, 11], [3, 4, 8, 10], [3, 4, 8, 11], [3, 4, 9, 10], [3, 4, 9, 11], [3, 5, 7, 10], [3, 5, 7, 11], [3, 5, 8, 10], [3, 5, 8, 11], [3, 5, 9, 10], [3, 5, 9, 11], [3, 6, 7, 10], [3, 6, 7, 11], [3, 6, 8, 10], [3, 6, 8, 11], [3, 6, 9, 10], [3, 6, 9, 11]]

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

Я думал о написании функции, которая рекурсивно вызывает себя для извлечения элементов из произвольного числа массивов, ноЯ не мог понять логику для этого.

Как можно решить эту проблему?

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

В случае array = [ [1,2,3], [4,5,6], [7,8,9], [10,11] ] ответом будет 7 , который мы получим, выбрав, например, (3, 5, 8, 10).

Есть ли другой способподойти к этой проблеме, не генерируя все перестановки всех элементов?

1 Ответ

2 голосов
/ 09 ноября 2019

Вы можете попробовать это

from itertools import product
array = [ [1,2,3], [4,5,6], [7,8,9], [10,11] ]
result = list(product(*array))
print(result)
>>> [(1, 4, 7, 10), (1, 4, 7, 11), (1, 4, 8, 10), (1, 4, 8, 11), (1, 4, 9, 10), 
(1, 4, 9, 11), (1, 5, 7, 10), (1, 5, 7, 11), (1, 5, 8, 10), (1, 5, 8, 11), 
(1, 5, 9, 10), (1, 5, 9, 11), (1, 6, 7, 10), (1, 6, 7, 11), (1, 6, 8, 10), 
(1, 6, 8, 11), (1, 6, 9, 10), (1, 6, 9, 11), (2, 4, 7, 10), (2, 4, 7, 11), 
(2, 4, 8, 10), (2, 4, 8, 11), (2, 4, 9, 10), (2, 4, 9, 11), (2, 5, 7, 10), 
(2, 5, 7, 11), (2, 5, 8, 10), (2, 5, 8, 11), (2, 5, 9, 10), (2, 5, 9, 11), 
(2, 6, 7, 10), (2, 6, 7, 11), (2, 6, 8, 10), (2, 6, 8, 11), (2, 6, 9, 10), 
(2, 6, 9, 11), (3, 4, 7, 10), (3, 4, 7, 11), (3, 4, 8, 10), (3, 4, 8, 11), 
(3, 4, 9, 10), (3, 4, 9, 11), (3, 5, 7, 10), (3, 5, 7, 11), (3, 5, 8, 10), 
(3, 5, 8, 11), (3, 5, 9, 10), (3, 5, 9, 11), (3, 6, 7, 10), (3, 6, 7, 11), 
(3, 6, 8, 10), (3, 6, 8, 11), (3, 6, 9, 10), (3, 6, 9, 11)]
...