标签:python algorithm combinations
我已经尝试在Python中的“Programming Interviews Exposed”中实现该算法,如下所示,但它似乎不起作用(第2版第99页):
这个想法是生成一个字符串的所有组合(而不是排列),这样如果你输入“wxyz”,你会得到“w,wx,wxy,wxyz,wxz,wy,wyz,wz ….”等等.显示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].这两个都导致删除了最后一项,但在当前代码中重新分配而不是使用相同的列表.这导致字符永远不会从原始列表中删除,这显然会使输出显着混乱.
进行更改后,输出如下:
>>> 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,algorithm,combinations 来源: https://codeday.me/bug/20190530/1185362.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。