【发布时间】:2013-06-13 03:49:05
【问题描述】:
我正在尝试创建一个通用函数来减少这样的列表:
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'])
我想我在某处遗漏了递归。
我不是特别要求代码,欢迎任何帮助或建议。谢谢。
【问题讨论】:
-
我不认为你在这里减少一个列表,而是你输出各种排列。
-
你不太舒服意味着它不起作用,或者它对你来说根本不好看?
-
这意味着,我知道它是如何工作的,我更喜欢在可能的情况下使用这些功能,但我仍然很难使用它。
-
您正在寻找 powersets,请参阅 itertools 页面上的配方:docs.python.org/2/library/itertools.html
标签: python list lambda reduce fold