как переставить каждую комбинацию из 4 символов без дубликатов? - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу сделать что-то, что принимает len (char) и переставляет каждую комбинацию из всех букв + цифр.

До сих пор я получил свой код, чтобы сделать это, но в моем случае из1679616 возможных комбинаций (36 ** 4), только около 1061340 из них не являются дубликатами (запускает его один раз), и я не могу понять, как повторить его, пока не получится всего 1679616 комбинаций.

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

import random

elements = [A-Z, 0-9]ect
code1 = ""
perms = []
actualperms = []


for e in range(6718464):
    code1 += random.choice(elements)
    if len(code1) == 4:
    code = "VLSC" + code1.upper() + "FE12"
    perms.append(code)
    code1 = ''

for elm in perms:
    if elm not in actualperms:
        actualperms.append(elm)

with open('code.json', 'w') as outfile:
    json.dump(acutalcombos, outfile)

Выходные данные показывают только 1100000 перестановок, но мне нужно всего 36** 4.Это также занимает много времени для экспорта в формате JSON, поэтому, если есть более быстрый способ, пожалуйста, скажите мне.

Кроме того, я знаю, что мой код крайне неэффективен, я начал пару месяцев назад

1 Ответ

1 голос
/ 17 апреля 2019

Использование itertools.product:

import json

from itertools import product
from string import ascii_lowercase, digits

result = list(product(ascii_lowercase + digits, repeat=4))

print(len(result) == 36 ** 4)

with open('permutations.txt', 'w') as f:
    json.dump(result, f)

Вывод:

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