gpt4 book ai didi

Python,递归地减少列表(组合/排列)

转载 作者:太空狗 更新时间:2023-10-30 02:32:38 25 4
gpt4 key购买 nike

我正在尝试制作一个通用函数来减少这样的列表:

func(['a','b','c'],str.join) # --> ['a','b','c','ab','ac','bc','abc']

func(['a','b','c'],lambda: a,b:a+'x'+b) # --> ['a','b','c','axb','axc','bxc','axbxc']

我真的不知道该怎么做。我做了几次尝试,但都没有成功。我很确定有一种方法可以用 reduce 来做到这一点,但我对使用这个功能不太满意。以下是一些尝试:

reduce(lambda a,b:[a,b,str(a)+str(b)],['a','b','c'])

reduce(str.join,['a','b','c'])

我想我在某处遗漏了递归。

我不是特别要求代码,欢迎任何帮助或建议。谢谢。

最佳答案

itertools.combinations 将为您提供特定长度的所有组合。我们采用每个可能的子列表长度的所有组合。然后,我们将您感兴趣的函数(lambda 函数,或者在本例中为 "x".join)映射到每个生成的组合。

>>> import itertools as it
>>> a = ['a','b','c']
>>> l = [map("x".join, list(it.combinations(a, l))) for l in range(1,len(a)+1)]
>>> l
[['a', 'b', 'c'], ['axb', 'axc', 'bxc'], ['axbxc']]

现在 l 是我们要展平的列表列表:

>>> [ x for y in l for x in y]
['a', 'b', 'c', 'axb', 'axc', 'bxc', 'axbxc']

关于Python,递归地减少列表(组合/排列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143321/

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