【发布时间】:2018-04-08 09:27:27
【问题描述】:
我的问题和this question一模一样。我有字符数组(列表)。我想从该列表中获取所有可能的序列组合,但 字符限制(例如:最多 2 个字符)。此外,排列行中不能重复单个字符:
chars = ['a', 'b', 'c', 'd']
# output
output = [['a', 'b', 'c', 'd'],
['ab', 'c', 'd'],
['a', 'bc', 'd'],
['a', 'b', 'cd'],
['ab', 'cd'],
['abc', 'd'], # this one will be exempted
['a', 'bcd'], # this one will be exempted
['abcd']] # this one will be exempted
我知道我可以在生成和构建序列时检查条件以省略超限字符组合。但它会增加运行时间。我的目的是减少现有的执行时间。
没有字符数限制,组合将像 2^(N-1) 一样生成。如果列表超过 15 个字符,则执行程序需要很长时间。因此,我想按字符限制减少组合计数。
优先级是性能。我已经研究并尝试了两天,没有任何成功。
【问题讨论】:
-
你没有尝试显示?
-
@usr2564301,确实是的。我已经使用修改后的版本尝试了上述重复问题的解决方案。我什至尝试了 Python itertools.combination 源代码并稍作修改。但所有的尝试甚至都没有达到预期。真的很抱歉我的无能。
-
尝试其他答案并出于某种原因拒绝它们并不是无能,但我怀疑您的结论。这是您可以添加的内容:上一个问题有 4 个答案(但可能有些相同)。由于您担心性能,请添加这些答案的时间并指出指数问题。
-
@usr2564301,我还在努力解决,也会尝试你的建议。谢谢。
标签: python combinations permutation