Реализация частного случая комбинацииPython

Программы на Python
Anonymous
Реализация частного случая комбинации

Сообщение Anonymous »

У меня есть массив необязательных массивов одинакового размера, который я хочу объединить следующим образом.
Каждый вложенный массив сканируется в том порядке, в котором они появляются в основном массиве. Сканируемый элемент объединяется с последним элементом каждого массива перед текущим и первым элементом каждого массива после текущего.
Пример:

Код: Выделить всё

all_arrays = [[1.1, 1.05], [2.1, 2.05, 2], [3.1, 3.05]]
Будет объединено следующим образом:

Код: Выделить всё

[
[1.1,  2.1,  3.1],
[1.05, 2.1,  3.1],
[1.05, 2.05, 3.1],
[1.05, 2,    3.1],
[1.05, 2,    3.05]
]
На практике all_arrays представляет собой список, вложенный массив представляет собой пустой массив, и каждая комбинация должна представлять собой кортеж длиной = 3. Моя текущая реализация выглядит так:

Код: Выделить всё

combinations = []
for ii in range(len(all_arrays)):
while len(all_arrays[ii]) > 1:
combinations.append(next(zip(*all_arrays)))
all_arrays[ii] = all_arrays[ii][1:]
combinations.append(next(zip(*all_arrays)))
Это работает нормально, но у меня возникло бы два вопроса:
  • Есть ли у такой комбинации имя? Я спрашиваю не только о моих личных знаниях, но и потому, что, если у него есть имя, вероятно, уже существует какой-то алгоритм, который реализовал его быстрее, чем я.
  • Даже если у него нет имени, видите ли вы лучший способ его реализации (возможно, даже с использованием другого типа данных)?


Подробнее здесь: https://stackoverflow.com/questions/798 ... ombination

Вернуться в «Python»