Перестановки диапазона с форматом Python3 - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь перестановки моих ключей, используя форматы и диапазоны.Я хочу, чтобы мой вывод выглядел следующим образом:

{'00', '000', '0000': 'A1'}
{'01', '10', '001', '010', '100', '0001', '0010', '0100', '1000': 'A2'}
{'02', '20', '002', '020', '200', '0002', '0020', '0200', '2000': 'A3'}

Код выше воспроизводится точно, если я просто делаю ustr = [a1% i для i в диапазоне (0, 2)], но когда я делаю ustr = [(a1 % i, b1 % i) for i in range(0, 2)]он объединяет их и производит дубликаты.Я знаю, что моя f''.join(i) вызывает проблему, я просто не могу понять, как заставить это сделать так, как я хочу.

from itertools import permutations

wd = {}

a1, b1, c1 = '%.2d', '%.3d', '%.4d'

ustr = [(a1 % i, b1 % i) for i in range(0, 3)]

d2 = {x: i for i, x in enumerate(sorted(set(ustr)))}

wd.update(d2)
for k, v in wd.items():
    perms = [f''.join(i) for i in list(sorted(set(permutations(k))))]
    print(perms)

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Возвращает желаемую строку (печатая каждую строку).

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

from itertools import chain

max_i = 3  # A1, A2, A3, ...
max_j = 4  # '01', '001', '0001'
d = {}
for i in range(1, max_i + 1):
    key = f'A{i}'
    numbers = list('0' * n + str(i) for n in range(1, max_j))
    perms = [sorted(set(permutations(number_str, len(number_str)))) 
             for number_str in numbers]
    tups = (''.join(p) for p in chain.from_iterable(perms))
    k = ", ".join(f"'{t}'" for t in tups) 
    print(f"{{{k}: 'A{i}'}}")
# Output
{'00', '000', '0000': 'A1'}
{'01', '10', '001', '010', '100', '0001', '0010', '0100', '1000': 'A2'}
{'02', '20', '002', '020', '200', '0002', '0020', '0200', '2000': 'A3'}
0 голосов
/ 24 сентября 2019

Я полагаю, что ниже будет делать то, что вы хотите сделать.Чтобы использовать его, просто сделайте fun(n), где n - максимум диапазона.

def fun(n):
    out = {}
    for q in range(0,5):                                 # this generates the multi-length outputs
        for i in range(0, n):                            # go through max length of original range
            y = [0 for x in range(0, q - len(str(i)))]   # this adds needed 0's
            y.append(i)                                  # add current i back in
            for w in list(set(permutations(y))):         # get the permutations
                r = ''.join([str(i) for i in y])         # turn them into strings
                out[r] = 'A' + str(i + 1)                # put them into dictionary with appropriate value of "A"
    return out

пример:

>>> x = fun(2)
>>> print(x)
{'0': 'A1', '1': 'A2', '00': 'A1', '01': 'A2', '000': 'A1', '001': 'A2', '0000': 'A1', '0001': 'A2'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...