Получение всех возможных комбинаций значений

#python #function #for-loop #combinations #itertools

Вопрос:

Я хочу написать код, который показывает все возможности вывода. приведенный ниже код показывает комбинации с переменными, которые не имеют повторения, поэтому для итерации 2 он не включает ('yes', 'yes') or ('no', 'no') . Я хочу добавить повторяющиеся значения в ожидаемый результат. iterator Значение указывает, сколько существует комбинаций, и все они должны быть одинаковой длины 2 или 3. Как я смогу это сделать и получить ожидаемый результат для итераций 2 и 3?

 # the possible combinations
  
from itertools import permutations

def vals(iterator):
    # of length 2
    comb = permutations(['yes','no'], iterator)
    print(f"iter amount :{iterator}")
    for i in comb:
        print(i)
    
vals(2)
vals(3)
 

Выходы:

 iter amount :2
('yes', 'no')
('no', 'yes')
iter amount :3
 

Ожидаемые Результаты:

 iter amount :2
('yes', 'yes')
('yes', 'no')
('no', 'yes')
('no', 'no')
iter amount :3
('yes', 'yes', 'yes')
('yes', 'yes', 'no')
('yes', 'no', 'no')
('no', 'no', 'no')
('no', 'no', 'yes')
('no', 'yes', 'yes')
 

Ответ №1:

Похоже, что вы, возможно, ищете itertools.product вместо этого.

 >>> import itertools
>>> for x in itertools.product(('yes', 'no'), repeat=3):
...     print(x)
...
('yes', 'yes', 'yes')
('yes', 'yes', 'no')
('yes', 'no', 'yes')
('yes', 'no', 'no')
('no', 'yes', 'yes')
('no', 'yes', 'no')
('no', 'no', 'yes')
('no', 'no', 'no')
 

Комментарии:

1. это работает, спасибо