如何在5个位置上获取所有带有N位数字的字母数字组合

时间:2018-08-27 07:09:29

标签: python combinations itertools

如何使用python获取5个位置的组合中所有带有N位数字的字母数字组合。
角色可以重复。
其余(5-N)个字符应为字母。
我的意思的示例:

Number of digits = 1 should generate:  
aygd3
2afvd
jde6a

Number of digits = 2 should generate:  
ay5d3
2af8d
jde64

Number of digits = 3 should generate:  
a15d3
26f8d
jd464

Number of digits = 4 should generate:  
315d3
26f87
9d464  

1 个答案:

答案 0 :(得分:1)

递归生成。 请注意,5/2组合的文件大小为117 MBytes
17 576 000个值(10^2 * 26^3 * C(5,2)

data = 'abcdefghijklmnopqrstuvwxyz0123456789'

def genld(s, maxlen, digs, digcnt):
    le = len(s)
    if (le == maxlen):
        #print(s)
        my_file.write(s + "\n")
    else:
        lo = 0 if (maxlen - le > digs - digcnt) else 26
        hi = 26 if (digcnt == digs) else 36
        for i in range(lo, hi):
            genld(s + data[i], maxlen, digs, digcnt + i // 26)

my_file = open("out.txt", "w")
genld('', 5, 2, 0)
my_file.close()