gpt4 book ai didi

python - 如何递归组合(链)列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:11 26 4
gpt4 key购买 nike

出于某种原因,我在思考递归算法时遇到了真正的麻烦......

我想知道是否有人可以帮我想出以下的递归版本:

我有一个数字列表列表,我想获取所有元素的所有可能排列列表。

例如,给定 [[1], [2,3], [4,5]],我希望输出为:

[[1,2,3,4,5], [1,2,3,5,4], [1,3,2,4,5], [1,3,2, 5,4]]

我这样做的方式有点丑陋:

l = (my list)
perms = [list(permutations(i)) for i in l]
p = perms[0]
for i in range(1, len(perms)):
p = list(map(lambda x: list(chain.from_iterable(x)), list(product(p, perms[i]))))
i += 1
print(p)

我不喜欢它……我觉得递归可能更优雅。有什么想法吗?

最佳答案

无需递归即可简化代码:

>>> from itertools import chain, product, permutations
>>> l = [[1], [2,3], [4,5]]
>>> perms = [list(permutations(x)) for x in l]
>>> [list(chain.from_iterable(xs)) for xs in product(*perms)]
[[1, 2, 3, 4, 5], [1, 2, 3, 5, 4], [1, 3, 2, 4, 5], [1, 3, 2, 5, 4]]

对于 product(*perms),请参阅 Unpacking Argument Lists - Python tutorial .

关于python - 如何递归组合(链)列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com