#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)]