Выбор 11 элементов из 30 может быть сделан 30!/(30 - 11)!
способами, что составляет около 2e+16
.Таким образом, требуемый список займет несколько эксабайт памяти!
Поскольку предварительные вычисления всех перестановок совершенно исключены, могу ли я предложить использовать random.choices
:
import random
name = ["p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","p16","p17","p18","p19","p20","p21","p22","p23","p24","p25","p26","p27","p28","p29","p30"]
for i in range(3):
combination = random.choices(name, k=11)
print(combination)
Обратите внимание, что random.choices
доступен только в Python 3.6.
Продолжайте использовать itertools.permutations
Вы также можете придерживаться itertools.permutations
, например, сохраняя генераторживой так:
from itertools import permutations
name = ["p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","p16","p17","p18","p19","p20","p21","p22","p23","p24","p25","p26","p27","p28","p29","p30"]
combinations = permutations(name, 11)
for i in range(3):
combination = next(combinations)
print(combination)
Обратите внимание, что при этом комбинация не будет выбрана случайным образом, а вместо этого приведет к очень предсказуемым комбинациям.Это может быть хорошо или плохо в зависимости от вашего варианта использования.