我想制作一个包含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还需要很长时间,因此,如果有更快的方法,请告诉我。
另外,我知道我的代码效率极低,我是几个月前开始的
答案 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