Создание конкретных перестановок Python - PullRequest
0 голосов
/ 13 мая 2018

У меня есть значения для двумерного списка:

# 4 x 4, 2-dimensional list
values = [[4, 7, 8], 
          [1, 3, 4], 
          [7, 5, 6], 
          [2, 9, 1]]

Я хочу создать кортежи, содержащие все возможные перестановки этих значений (декартово произведение) для каждого списка.

# example for the list at index 0 of values
args0 = [(4, 7, 8), (7, 4, 8), (4, 8, 7), (8, 4, 7), (7, 8, 4), (8, 7, 4)] 

Есть ли простой способ сделать это? Я пробовал itertools, но не могу заставить его работать с «конкретными значениями».

1 Ответ

0 голосов
/ 13 мая 2018

То, что вам нужно, это перестановки каждого элемента в списке, поэтому просто map itertools.permutations:

import itertools

values = [[4, 7, 8], 
          [1, 3, 4], 
          [7, 5, 6], 
          [2, 9, 1]]

perms = map(itertools.permutations, values)
for v in perms:
    print(list(v)) 

Результат:

[(4, 7, 8), (4, 8, 7), (7, 4, 8), (7, 8, 4), (8, 4, 7), (8, 7, 4)]
[(1, 3, 4), (1, 4, 3), (3, 1, 4), (3, 4, 1), (4, 1, 3), (4, 3, 1)]
[(7, 5, 6), (7, 6, 5), (5, 7, 6), (5, 6, 7), (6, 7, 5), (6, 5, 7)]
[(2, 9, 1), (2, 1, 9), (9, 2, 1), (9, 1, 2), (1, 2, 9), (1, 9, 2)]

Здесь у вас есть живой пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...