我有这样的代码:
start = 1
end = 2
for length in range(start, end+1):
for c in itertools.combinations_with_replacement(string.ascii_letters + string.digits, length):
这将打印从A到Z的每个大写/小写字母,并且在所有字母完成后,它将开始打印从0到9的所有数字。所以它看起来像这样:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
完成第一个循环后,它继续第二个循环并执行相同的操作。 像这样:
第一个周期开始:a
第二个周期开始:aa
等等。
我想从特定字母或数字开始组合。
像这样:
组合1:
第一个周期开始:b
第二个周期开始:ba
如果不可能,那么就像这样:
组合2:
第一个周期开始:b
第二个周期开始:bb
答案 0 :(得分:1)
我认为您要求在某个指数之后进行所有可能的修改,在这种情况下您可以这样做:
import string
import itertools
chars = string.ascii_letters + string.digits
def alpha_perms(index):
return list(itertools.permutations(chars[index:]))
print(alpha_perms(0)) #0th index to go along with the below statement
虽然......这很可能(绝对)冻结你的机器。 chars
中有62个字符62!
(62阶乘),大约等于 3.1469973e + 85 或~π*假设你传入了第0个索引,那么10 ^ 85th 幂可能的组合。即使合理的指数也需要很长时间。
或者,因为使用return list(...)
会导致高组合可能性的问题。您可以yield
值
import string
import itertools
chars = string.ascii_letters + string.digits
def alpha_perms(index):
for perm in itertools.permutations(chars[index:]):
yield perm