首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串中所有字符的排列

字符串中所有字符的排列
EN

Stack Overflow用户
提问于 2022-09-27 12:43:13
回答 1查看 37关注 0票数 -2

我试图使用不同字符串中的字符生成一个序列。

示例:

["abcdef", "xyz", "-/", "98765"]

  • Output: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

输入:

代码:

代码语言:javascript
复制
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)

我在重置参数方面犯了一些错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-27 12:50:58

你真的不需要递归,也不需要带一堆参数。只需使用笛卡儿产品(其中有实用程序):

代码语言:javascript
复制
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
# ...

如果你下地狱般的决心自己去做,你仍然可以保持简单:

代码语言:javascript
复制
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', ... ]

注意,当函数返回有意义的内容时,递归要容易得多,而不是只产生副作用(比如控制台打印)。您仍然可以使用函数返回值获取打印显示:

代码语言:javascript
复制
for tsn in print_taxi_serial_numbers(params):
    print(tsn)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73867791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档