我试图使用不同字符串中的字符生成一个序列。
示例:
["abcdef", "xyz", "-/", "98765"]
ax-9,ax-8,ax-7,ax-6,ax-5,ax/9,ax/8,ax/7,ax/6,ax/5,ay-9,ay-8,ay-7,ay-6,ay-5输入:
代码:
def print_taxi_serial_numbers(params, code, level, offsets, n):
params_length = len(params)
print("TT11 :: ", code, level, offsets)
if level == params_length-1:
for c in params[level]:
print("{}{}".format(code,c))
else:
while True:
print("LEVEL :: ", level)
if level == 0:
code = ""
code = "{}{}".format(code, params[level][offsets[level]])
offsets[level] += 1
level = level + 1
if level >= params_length:
print("LEVEL1 :: ", level, " params_length :: ", params_length, " yy :: ", offsets, " zz ", params)
return
print_taxi_serial_numbers(params, code, level, offsets, n)
print("TT :: ", code, level, offsets)
#Function Call
params = ["abcdef", "xyz", "-/", "98765"]
print_taxi_serial_numbers(params, "", 0, len(params)*[0], 10)我在重置参数方面犯了一些错误。
发布于 2022-09-27 12:50:58
你真的不需要递归,也不需要带一堆参数。只需使用笛卡儿产品(其中有实用程序):
from itertools import product
def print_taxi_serial_numbers(params):
for p in product(*params):
print(''.join(p))
>>> print_taxi_serial_numbers(["abcdef", "xyz", "-/", "98765"])
ax-9
ax-8
ax-7
ax-6
ax-5
# ...如果你下地狱般的决心自己去做,你仍然可以保持简单:
def taxi_serial_numbers(params):
if not params:
return [""]
result = []
first, *params = params
for char in first:
for tsn in taxi_serial_numbers(params):
result.append(char + tsn)
return result
>>> taxi_serial_numbers(["abcdef", "xyz", "-/", "98765"])
['ax-9', 'ax-8', 'ax-7', 'ax-6', 'ax-5', 'ax/9', 'ax/8', ... ]注意,当函数返回有意义的内容时,递归要容易得多,而不是只产生副作用(比如控制台打印)。您仍然可以使用函数返回值获取打印显示:
for tsn in print_taxi_serial_numbers(params):
print(tsn)https://stackoverflow.com/questions/73867791
复制相似问题