Я пытаюсь использовать itertools.product для управления бухгалтерией некоторых вложенных циклов, где количество вложенных циклов неизвестно заранее. Ниже приведен конкретный пример, в котором я выбрал два вложенных цикла; выбор двух - только для ясности, то, что мне нужно, - это решение, которое работает для произвольного числа циклов.с помощью python itertools для управления вложенными для циклов
Этот вопрос предусматривает расширение/обобщение вопроса появляясь здесь: Efficient algorithm for evaluating a 1-d array of functions on a same-length 1d numpy array
Теперь я простирающийся выше технику с использованием itertools трюк я узнал здесь: Iterating over an unknown number of nested loops in python
Преамбула:
from itertools import product
def trivial_functional(i, j): return lambda x : (i+j)*x
idx1 = [1, 2, 3, 4]
idx2 = [5, 6, 7]
joint = [idx1, idx2]
func_table = []
for items in product(*joint):
f = trivial_functional(*items)
func_table.append(f)
В конце вышеперечисленного цикла itertools у меня есть 12-элементный 1-мерный массив функций, func_ta ble, каждый элемент был построен из тривиального_функционала.
Вопрос:
Пусть мне дадут пару целых чисел, (i_1, i_2), где эти числа должны быть интерпретированы как показатели idx1 и idx2 соответственно. Как я могу использовать itertools.product для определения правильного соответствующего элемента массива func_table ?
Я знаю, как взломать ответ, написав мою собственную функцию, которая имитирует бухгалтерию itertools.product, но, несомненно, есть встроенная функция itertools.product, предназначенная именно для этой цели?
Позвольте мне перефразировать ваш вопрос: вам в основном нужны не только элементы входных последовательностей, но и их индексы? – dhke
Да, это эффективный способ его поместить. – aph
Опять же, я могу вручную посмотреть, как работает itertools и написать независимую функцию, которая возвращает индексы. Но это кажется ненужным повторением работы, так как itertools, должно быть, решил эту проблему уже, поэтому я бы предпочел использовать унифицированный синтаксис itertools, если он доступен. – aph