python - 生成字符串的组合(不是排列)

标签 python algorithm combinations

我试过用 Python 实现“Programming Interviews Exposed”中的算法,如下所示,但它似乎不起作用(第 2 版第 99 页):

这个想法是生成一个字符串的所有组合(不是排列),这样如果你输入“wxyz”你会得到“w, wx, wxy, wxyz, wxz, wy, wyz, wz....” etc. 如果显示 wz 则 zw 无效。

def doCombine(strng, out, length, level, start):
    for i in range(start, length):
        out.append(strng[i])
        print out
        if (i < length - 1):
            doCombine(strng, out, length, level +1, i + 1)
        out = out[:-1]

x = list()
target = "wxyz"
print doCombine(target, x, len(target), 0, 0)

这里有什么问题?我得到相对垃圾的输出。

最佳答案

在您当前的代码中,尝试将 out = out[:-1] 行更改为 del out[-1]。这两者都会导致 out 删除最后一项,但在您当前的代码中 out 被重新分配,而不是使用相同的列表。这导致字符永远不会从原始列表中删除,这显然会严重干扰输出。

修改后,输出如下:

>>> print doCombine(target, x, len(target), 0, 0)
['w']
['w', 'x']
['w', 'x', 'y']
['w', 'x', 'y', 'z']
['w', 'x', 'z']
['w', 'y']
['w', 'y', 'z']
['w', 'z']
['x']
['x', 'y']
['x', 'y', 'z']
['x', 'z']
['y']
['y', 'z']
['z']
None

关于python - 生成字符串的组合(不是排列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347815/

相关文章:

python - 在 PyMySQL 中使用 Django 2.2 时遇到问题

python - 人们通常如何处理 Django 中的类变量?

algorithm - 处理图中的负循环

python - Python 中有限重复的组合

performance - 在 Perl 中高效处理所有可能的二维数组组合

c - 在 C 中生成数组值的所有可能组合

python - Django Views - 阻止连续快速调用

python - 算法效率——使用Pandas的数据处理效率(三个嵌套的for循环)

c++ - 如何优化我的 Langford 序列函数?

java - 组织 K 内所有元素所需的最小交换