Как применить itertools.product к элементам списка списков?
У меня есть список массивов, и я хочу получить декартово произведение элементов этих массивов.
Чтобы проиллюстрировать проблему, приведу пример...
itertools.product
вроде как должен помочь, но я застрял на небольшом нюансе.
arrays = [(-1, +1), (-2, +2), (-3, +3)];
Если я сделаю следующее:
cp = list(itertools.product(arrays));
То я получаю:
cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
Но я хочу получить:
cp1 = [(-1, -2, -3), (-1, -2, +3), (-1, +2, -3), (-1, +2, +3), ..., (+1, +2, -3), (+1, +2, +3)].
Я пробовал несколько различных вариантов:
cp = list(itertools.product(itertools.islice(arrays, len(arrays))));
cp = list(itertools.product(iter(arrays, len(arrays))));
Все они вернули мне cp0 вместо cp1.
Есть идеи, как это исправить?
Заранее спасибо.
2 ответ(ов)
Ваш код должен передавать все пары в product
как отдельные аргументы, чтобы получить их декартово произведение.
Проблема в вашем варианте заключается в том, что вы передаете в product
только один аргумент. Запрашивая декартово произведение одного списка, вы получаете тривиальный случай, который возвращает список, содержащий только один элемент — сам переданный список.
Ваша задача заключается в получении всех возможных комбинаций из заданных массивов, где каждый элемент массива представлен кортежем значений, которые могут быть как положительными, так и отрицательными. Для этого вы можете использовать функцию itertools.product
из модуля itertools
.
Вот пример кода, который достигает этой цели:
import itertools
arrays = [(-1, +1), (-2, +2), (-3, +3)]
result = list(itertools.product(*arrays))
print(result)
В результате выполнения этого кода вы получите список всех возможных комбинаций для указанных массивов. Результат будет следующим:
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)]
Обратите внимание, что каждая комбинация включает один элемент из каждого кортежа, и они могут быть как положительными, так и отрицательными. Функция itertools.product
позволяет удобно генерировать все возможные произведения указанных последовательностей.
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата
Почему statistics.mean() работает так медленно?
Преобразование строки даты JSON в datetime в Python
Есть ли разница между поднятием экземпляра класса Exception и самого класса Exception?