Я ищу элегантную (быструю) функцию Python, которая создает каждую комбинацию из следующих двух массивов.
cards = ["8H", "8S", "8C", "8D", "9H", "9S", "9C", "9D", "10H", "10S", "10C", "10D", "AH", "AS", "AC", "AD"]
players = ["_1", "_1", "_1", "_2", "_2", "_2", "_3", "_3", "_3", "_4", "_4", "_4", "_To", "_To", "_To", "_Tc"]
Комбинация будет выглядеть так:
[('8H', '_1'), ('8S', '_1'), ('8C', '_1'), ('8D', '_2'), ('9H', '_2'), ('9S', '_2'), ('9C', '_3'), ('9D', '_3'), ('10H', '_3'), ('10S', '_4'), ('10C', '_4'), ('10D', '_4'), ('AH', '_To'), ('AS', '_To'), ('AC', '_To'), ('AD', '_Tc')]
Но! без равных, что я имею в виду. Пример:
Если бы карты были:
["a", "b", "c", "d"]
Если бы игроки были:
["1", "1", "2", "2"]
Результат:
[1a, 1b, 2c, 2d]
[1a, 1c, 2b, 2d]
[1a, 1d, 2b, 2c]
[1b, 1c, 2a, 2d]
[1b, 1d, 2a, 2c]
[1c, 1d, 2a, 2b]
Не например:
[1a, 1b, 2d, 2c]
Игрок 2, имеющий (c и d), равен (d и c)
Я пробовал функцию itertools
, например combinations
и permutations
, но безуспешно. Отказ от равенства после получения всех комбинаций на самом деле не вариант из-за взрыва пространства состояний.
Я надеюсь, что у кого-то есть решение, потому что поиск Google для этой конкретной проблемы не удался.