python itertools продукт с шагами - PullRequest
0 голосов
/ 19 февраля 2020

В настоящее время у меня есть массив NumPy:

a = np.array([[1,2],[3,4],[5,6]])

И я выполняю операцию продукта в itertools, но я хочу добавить функцию шага. Например:

[ x for x in itertools.product(*a) ]

Результат:

[(1, 3, 5), (1, 3, 6), (1, 4, 5), (1, 4, 6), (2, 3, 5), (2, 3, 6), (2, 4, 5), (2, 4, 6)]

Для целевого вывода с шагом (1,1,2):

[(1, 3, 5), (1, 4, 5), (2, 3, 5), (2, 4, 5)]

Я могу ' Не могу понять, вот в чем проблема.

Ответы [ 3 ]

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

Просто используйте фрагмент списка:

In [578]: import itertools                                                                     
In [579]: a=[[1,2],[3,4],[5,6]]                                                                
In [580]: list(itertools.product(*a))[::2]                                                     
Out[580]: [(1, 3, 5), (1, 4, 5), (2, 3, 5), (2, 4, 5)]

Для этого могут быть также itertools инструменты.

In [586]: list(itertools.islice(itertools.product(*a), None, None,2))                          
Out[586]: [(1, 3, 5), (1, 4, 5), (2, 3, 5), (2, 4, 5)]
1 голос
/ 19 февраля 2020

Это должно сделать:

step = (1,1,2)
[ x for x in itertools.product(*[a[i,::s] for i,s in enumerate(step)])]
0 голосов
/ 19 февраля 2020

Вы можете использовать этот код. Я думаю, что ваша проблема решена.

import itertools

print (list (itertools.product (* [[1,2], [3,4], [5,6]]) ) [:: 2])

...