Python: как получить все упорядоченные комбинации из множества списков - PullRequest
0 голосов
/ 18 декабря 2018

скажем, у меня есть следующие списки:

a = [1, 2, 3]
b = [11, 12, 13]
c = [111, 112, 113]

Я хочу получить следующий вывод

[1,2,3]
[1,2,13]
[1,2,113]
[1,12,3]
[1, 12, 13]
[1, 12, 113]
[1,112,3]
[1,112,13]
[1, 112, 113]
[11,2,3]
[11, 2, 13]
[11, 2, 113]
[11, 12, 3]
[11, 12, 13]
[11, 12, 113]
[11, 112, 3]
[11, 112, 13]
[11, 112, 113]
...

Следовательно, я хочу иметь функцию, которая даст мне всеперечисление комбинаций, которые представляют собой выборки некоторых членов набора, где порядок не учитывается - набор списков, когда каждый элемент в них сохраняет свой индекс из исходного списка.

Я просмотрел все параметры в itertoolsи не нашел никакого решения.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018
 a = [1, 2, 3]
 b = [11, 12, 13]
 c = [111, 112, 113]
 d=[]
 for i in range(3):
     d.append((a[i],b[i],c[i]))
 print(d)
 for i in range(len(d)):
     for k in range(3):
         for j in range(3):
             print(d[0][i],d[1][k],d[2][j])

Это поможет мне угадать

0 голосов
/ 18 декабря 2018

Просто zip ваши списки перед использованием product:

from itertools import product

a = [1, 2, 3]
b = [11, 12, 13]
c = [111, 112, 113]

for p in product(*(zip(a, b, c))):
    print(p)

Вывод:

(1, 2, 3)
(1, 2, 13)
(1, 2, 113)
(1, 12, 3)
(1, 12, 13)
(1, 12, 113)
(1, 112, 3)
(1, 112, 13)
(1, 112, 113)
(11, 2, 3)
(11, 2, 13)
(11, 2, 113)
(11, 12, 3)
....

Чтобы ответить на ваш комментарий: вывод zip:

print(list(zip(a, b, c)))
#  [(1, 11, 111), (2, 12, 112), (3, 13, 113)]

Затем product сгенерирует свой вывод, приняв одно значение в каждом из этих трех кортежей.

...