如何置换4个字符的每个组合,而不重复?

时间:2019-04-17 04:47:27

标签: python permutation

我想制作一个包含len(char)并置换所有字母和数字的单个组合的东西。

到目前为止,我已经有了代码来执行此操作,但是就我而言,在1679616个可能的组合(36 ** 4)中,只有约1061340是非重复的(运行一次),我可以请找出如何重新循环,直到总共获得1679616个组合。

我已经尝试过在每次重复时更改循环的运行,但是这使循环最多需要20个小时,因此我不愿意这样做。我尝试了无数其他方法,但都失败了。 我不想使用随机方法,而是希望最终遍历每个元素并找到每个单独的组合,但是我对此也失败了。

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 个答案:

答案 0 :(得分:1)

使用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