Python: понимание двойного вложенного списка - PullRequest
0 голосов
/ 13 февраля 2020

Я пишу функцию, которая выбирает входные данные для другой числовой функции, которая имеет 5 входов, с заданными минимальными и максимальными значениями для каждого входа. Это должно привести к num_samples ^ 5 различных комбинаций ввода.

Я бы хотел сделать этот фрагмент кода короче, так что явные индексы от 0 до 4 больше не нужны.

num_inputs = 5
num_samples = 10.0

sampled_inputs = [[a, b, c, d, e]
                  for a in sample_range(mins[0], maxes[0], num_samples)
                  for b in sample_range(mins[1], maxes[1], num_samples)
                  for c in sample_range(mins[2], maxes[2], num_samples)
                  for d in sample_range(mins[3], maxes[3], num_samples)
                  for e in sample_range(mins[4], maxes[4], num_samples)]

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

Есть ли какой-нибудь трюк, которого я не вижу? Заранее спасибо.

1 Ответ

1 голос
/ 13 февраля 2020

Вы пытаетесь получить здесь декартово произведение?

Если это так, используйте itertools.product.

import itertools
lists = [sample_range(mins[i], maxes[i], num_samples) for i in range(4)]
prod = itertools.product(*lists)
for elem in prod:
   print(elem)
...