Найдите все комбинации списка в python - PullRequest
1 голос
/ 19 июня 2020

Список, который у меня есть:

a = [1,2,3]

Результат, который я хочу:

combinations = [11, 12, 13, 21, 22, 23, 31, 32, 33]

Я пробовал:

a = [1,2,3]
all_combinations = []
list1_permutations = itertools.permutations(a, len(a))
for each_permutation in list1_permutations:
    zipped = zip(each_permutation, a)
    all_combinations.append(list(zipped))

print(all_combinations)

Но я получаю вывод вроде:

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

Ответы [ 2 ]

3 голосов
/ 19 июня 2020

Это может быть проще всего с пониманием вложенного списка:

a = [1, 2, 3]

out = [int(f'{i}{j}') for i in a for j in a]
print(out)

Вывод:

[11, 12, 13, 21, 22, 23, 31, 32, 33]

Тот же результат может быть достигнут (возможно, более эффективно) с помощью itertools.product:

import itertools

a = [1, 2, 3]
out = [int(f"{a}{b}") for a, b in itertools.product(a, a)]
1 голос
/ 19 июня 2020

Это должно сработать.

  • вы можете использовать понимание списка, чтобы сделать все комбинации, потому что вы, кажется, хотите пробовать с дубликатами, такими как '33'
  • вы можете использовать список gen, чтобы сделать это
  • , вам нужно обработать элементы, такие как строки, до join их
  • вам нужно преобразовать его обратно в целое число, если это то, что вы хотите в качестве окончательного результата

a=[1,2,3]

result = [int(''.join([str(i), str(j)])) for i in a for j in a]

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