【发布时间】:2017-07-06 05:43:34
【问题描述】:
例如,我需要生成从 "a" 到 "]]]]]]" 的组合,为此我使用了这个运行良好的 python 脚本。
import itertools
DATA_ALPHA_NUM =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&-
()@=+;/!%$\\'\",.<>*^{}#~_[]"
b = 10
for i in range(1,int(b)+1):
for e in itertools.combinations(DATA_ALPHA_NUM,i): print(''.join(e))
但是现在我需要做相反的事情,例如:如果我给新脚本“1”,它将输出“a”,如果我给 90,它将输出“]”等等。
我写了几个脚本,在少于 737191 个组合的情况下运行良好,但在使用后效果不佳。
编辑:有人写了类似的东西然后删除它几乎是完美的..
alphaNumList = list(DATA_ALPHA_NUM)
alphaNumList.insert(0, "")
result = ["".join(item) for item in
itertools.islice(itertools.product(alphaNumList, repeat=6), 0,1)]
【问题讨论】:
-
如果你有内存,你可以按索引将组合存储在字典中。但这会消耗大量内存,是的。
-
@Jean-FrançoisFabre 我知道,但我想在没有循环的情况下做到这一点,我需要非常快速地获取索引..
-
有人写了类似“result = [”“.join(item) for item in itertools.islice(itertools.product(alphaNumList, repeat=6), 0,1)]”的东西完美但过早停止
-
是的,但想法就在这里