Python: мне нужна помощь в создании списков чисел в определенном формате - PullRequest
0 голосов
/ 06 июля 2018

У меня проблемы с генерацией списков чисел со следующими параметрами:

  1. указанное пользователем количество цифр
  2. Повторяется одно число
  3. Создайте все возможные комбинации с этим шаблоном

В идеале я хотел бы, чтобы мой вывод был похож на этот

list = [1123, 1213, 1231, 1223, 1232, 1233]

но для любого количества цифр.

Спасибо!

Обновление:

Input

digits = 5

выход

output = [11234, 12134, 12314, 12341, 12234, 12324, 12342, ... ] 

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

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Вот мое предложение:

Дать указанное число n:

  1. Создать каждую комбинацию с номерами 1 to n+1.

  2. A for цикл от 1 до n, который заменяет n+1 на переменную цикла for i.

  3. Используйте a = list(set(a)), чтобы избавиться от повторной комбинации.

Надеюсь, этот псевдокод поможет вам.

0 голосов
/ 06 июля 2018

Вы можете сделать это, используя itertools.permutations.

permutations('123') даст вам все возможные числа, которые могут быть сгенерированы с цифрами 1,2,3, но в формате кортежа.

list(permutations('123'))
[('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1', '2'), ('3', '2', '1')]

Так что вы можете сделать что-то вроде

from itertools import permutations, chain
n=3
tpls = [permutations(chain([i], range(1,n)), n) for i in range(1, n)]
# tpls contains all possible answers in tuple format

# To convert it to list of numbers
f = lambda t: int(''.join(map(str, t)))
[f(x) for x in chain(*tpls)]
# [112, 121, 112, 121, 211, 211, 212, 221, 122, 122, 221, 212]
0 голосов
/ 06 июля 2018

Это не совсем питонное решение, но я нашел его. Вы можете принять цифру как ввод от пользователя.

digit = 5
list = []
val = []
temp = []
for i in range(1,digit):
    i = str(i)
    val.append(i)
    temp.append(i)
for i,num1 in enumerate(val):
    for j, num2 in enumerate(val):
        if int(i) <= int(j):
            temp.insert(int(j+1),num1)
            list.append("".join(temp))
            temp = []
            for k in range(1,digit):
                k = str(k)
                temp.append(k)
result = map(int,list) # Convert all element of list to int
print(result)

выход

[11234, 12134, 12314, 12341, 12234, 12324, 12342, 12334, 12343, 12344]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...