我正在做我的空闲时间的项目,只是试图生成线性的字符组成的12个大字符串。
为此,我使用了12个嵌套for
循环的野兽。
def linear():
vocabulary = string.digits + string.ascii_uppercase
coupon = list("000000000000")
count = 0
for a in range(36):
coupon[0] = vocabulary[a]
for b in range(36):
coupon[1] = vocabulary[b]
for c in range(36):
coupon[2] = vocabulary[c]
for d in range(36):
coupon[3] = vocabulary[d]
for e in range(36):
coupon[4] = vocabulary[e]
for f in range(36):
coupon[5] = vocabulary[f]
for g in range(36):
coupon[6] = vocabulary[g]
for h in range(36):
coupon[7] = vocabulary[h]
for i in range(36):
coupon[8] = vocabulary[i]
for j in range(36):
coupon[9] = vocabulary[j]
for k in range(36):
coupon[10] = vocabulary[k]
for l in range(36):
coupon[11] = vocabulary[l]
count += 1
print(''.join(coupon), " - Attempt number: ", count)
它可以按预期工作,但是我想知道Python是否可以通过更漂亮的方式再次使我惊奇,仍然可以让我在生成每个组合时对其进行迭代-因为正如其他人指出的那样-36 ^ 12个组合是不现实的。
答案 0 :(得分:1)
让我们看看:
import string, itertools
for a in itertools.product(string.digits + string.ascii_uppercase, repeat=12):
print(''.join(a))
但是我不会尝试运行它。
答案 1 :(得分:0)
使用itertools.combinations(iterable, r):
from itertools import combinations
import string
vocabulary = string.digits + string.ascii_uppercase
output = list(combinations(vocabulary, 12))
output = [('').join(x) for x in output]
但是请考虑有36^12
种可能的组合〜4.7383813e+18