Python中是否有捷径可用于一堆嵌套的for循环?

时间:2019-06-16 18:23:34

标签: python-3.x

我正在做我的空闲时间的项目,只是试图生成线性的字符组成的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个组合是不现实的。

2 个答案:

答案 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