#python #python-3.x #itertools
Вопрос:
a = [[1,2,3,4],[2,3,4,5],[5,6,7,8],[4,3,2,3]] output: (1,2,5,4),(1,2,5,3),(1,2,5,2)...
У меня есть несколько списков, в которых я пытаюсь найти все возможные комбинации, похожие на приведенный выше код. Однако из-за большого количества списков и количества элементов в списке мой компьютер не может его обработать. Поэтому мне было интересно, есть ли способ отфильтровать некоторые комбинации, сложив все элементы(числа) вместе. например: (1,2,5,4) = 12; А затем, если общее количество в этом списке меньше 15, удалите этот список и перейдите к следующей комбинации. Мне все равно пришлось бы сделать что-то подобное после того, как я получил все комбинации, поэтому я подумал, почему бы не сделать это раньше.
Мой код, который генерирует все возможные комбинации:
list(itertools.product(*a))
Есть какие-нибудь идеи о том, как я могу реализовать эту концепцию фильтрации?
Ответ №1:
Вы можете использовать понимание списка:
from itertools import product a = [[1,2,3,4],[2,3,4,5],[5,6,7,8],[4,3,2,3]] l = [e for e in product(*a) if sum(e) gt; 15]
Однако имейте в виду, что создание исходных продуктов может быть узким местом. Если у вас слишком много элементов (в вашем примере всего 256), существует вероятность того, что ваш компьютер никогда не сможет сгенерировать их все, и фильтрация ничего не изменит.