Создайте возможные комбинации и получите только первые 50

Я ищу способ получить первые 50 только из возможных комбинаций (20 фиксированной длины) с условиями, но я не могу найти то, что я ищу. У меня есть пример ниже.

import itertools
a = array([1,2,5])
b = array([8,9,10])
c = 0
if c == 1:
  x = a
  y = b
else:
  x = b
  y = a
mylist = list(itertools.product(x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y))

Мой вывод будет:

(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 5)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2 8 1)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2 8 2)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2 8 5)
.
.

и так далее..

Я уже столкнулся с ошибкой памяти. Я думаю, что здесь слишком много комбинаций, поэтому я хочу получить только первые 50. Есть ли способ сделать это?

Заранее спасибо!

1 ответ

Решение

Оставаться с itertools использовать islice:

list(itertools.islice(itertools.product(x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y), 50))

это берет первые 50 элементов из product и преобразует их в список.

Другие вопросы по тегам