Просто используйте islice
, что позволяет вам взять несколько элементов из итерируемого:
from itertools import permutations, islice
n_elements = 1000
list(islice(permutations(x), 0, 1000))
Это вернет list
из (первой) 1000 перестановок.
Причина, по которой это работает, заключается в том, что permutations
возвращает итератор , который является объектом, который генерирует значения, которые возвращаются по мере необходимости, а не сразу. Поэтому процесс идет примерно так:
- Вызывающая функция (в данном случае
list
) запрашивает следующее значение из islice
islice
проверяет, было ли возвращено 1000 значений; если нет, то запрашивается следующее значение из permutations
permutations
возвращает следующее значение в порядке
Из-за этого полный список перестановок никогда не нужно генерировать; мы берем только столько, сколько хотим.