假设您有一个在多个位置递增的标签:
例如,1-A-1
。
假设第三个点最多可以增加10次(1-A-10
),之后A
将变成B
:1-B-1
。
然后,此过程重复进行,直到1-Z-10
,然后递增2-A-1
。
如何编写通用函数以生成包含从1-A-1
到10-Z-10
的所有组合的列表?
答案 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