如何在Python中生成范围的多个深度列表?

时间:2019-02-20 16:04:28

标签: python algorithm combinations

假设您有一个在多个位置递增的标签:

例如,1-A-1。 假设第三个点最多可以增加10次(1-A-10),之后A将变成B1-B-1

然后,此过程重复进行,直到1-Z-10,然后递增2-A-1

如何编写通用函数以生成包含从1-A-110-Z-10的所有组合的列表?

1 个答案:

答案 0 :(得分:3)

这似乎是itertools.product的完美用例

labels = itertools.product(range(1, 11), string.ascii_uppercase, range(1, 11))
# (1, 'A', 1) (1, 'A', 2) (1, 'A', 3) ...

product(as, bs, cs, ds, ...)创建一个生成器,该生成器生成类似于多级深for循环的值:

for a in as:
    for b in bs:
        for c in cs:
            for d in ds:
                yield (a, b, c, d)

因此要使用此功能,您可以直接将其投射到列表:

result = [f"{a}-{b}-{c}" for a, b, c in labels]

或在labels上循环

for label in labels:
    a, b, c = label
    formatted = f"{a}-{b}-{c}"
    # do something with formatted