我需要创建这些字符的所有组合:
'0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM. '
长度为100个字母,例如:
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001'
我目前正在使用此代码:
import itertools
babel = itertools.product(k_c, repeat = 100)
此代码有效,但是我需要能够在某个索引处返回该组合,但是itertools.product
不支持索引,将产品转换为列表会产生MemoryError,并反复遍历该产品,直到达到某个确定值为止价值超过十亿的时间太长。
感谢您的帮助
具有64个字符和100个字母,将有64 ^ 100个组合。对于第一个字母的每个值,其余字母将有64 ^ 99个组合,然后是64 ^ 98、64 ^ 97,依此类推。
这意味着您的第N个组合可以在基数64中表示为N,其中每个“数字”代表字符串中字母的索引。
一个简单的解决方案是通过逐步确定每个位置的索引并使用N的其余部分获取其余字符串来递归地构建字符串:
chars = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM. '
def comboNumber(n,size=100):
if size == 1: return chars[n]
return comboNumber(n//len(chars),size-1)+chars[n%len(chars)]
输出:
c = comboNumber(123456789000000000000000000000000000000000000123456789)
print(c)
# 000000000000000000000000000000000000000000000000000000000000000000000059.90jDxZuy6drpQdWATyZ8007dNJs
c = comboNumber(1083232247617211325080159061900470944719547986644358934)
print(c)
# 0000000000000000000000000000000000000000000000000000000000000000000000Python.Person says Hello World