Печать всех пар комбинаций из заданного набора чисел

#python

#python

Вопрос:

Я пытаюсь понять, почему комбинации, скажем, 0 и 1, являются только: [(0, 0), (0, 1), (1, 1)] и почему (1,0) не включено.

То же самое относится ко всем комбинациям пар 0,1,2,3. Я хотел бы получить: (0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2),(1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3)

Но мой код только дает мне: [(0, 0), (0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

Мой / код, который я получил от realpython.com/python-itertools/ :

 import itertools as com

x = list(com.combinations_with_replacement([0,1,2,3], 2))
 

Как я могу отредактировать код, чтобы он печатал все нужные комбинации?

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

1. Вернитесь к itertools документации и прочитайте о product методе.

2. Примечание: я бы посоветовал ознакомиться с документацией с официального сайта Python. docs.python.org/3/library/itertools.html

Ответ №1:

Вы хотели бы использовать itertools.product , поскольку вам нужно декартово произведение:

 >>> import itertools
>>> list(itertools.product([0, 1, 2, 3], repeat=2))
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3)]
 

Обратите внимание, что вы не хотите использовать itertools.permutations , поскольку вывод не будет содержать записей, например (0, 0), (1, 1), (2, 2), or (3, 3) , поскольку каждый элемент в итерируемом используется только один раз.

Ответ №2:

Для того, чтобы получить все возможные комбинации, вам необходимо использовать product функцию:

 import itertools as com

x = list(com.product([0,1,2,3], repeat=2))
print(x)
 

Как указано в документах Python, это то же самое, что:

 x = [(y,z) for y in [0,1,2,3] for z in [0,1,2,3]]
 

Это вернет:

 [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3)]