我有一个列表:
mylist = [ "abc", "def", "-" ]
我已经尝试并搜索了大量的组合,但没有任何接近它的结果,预期的结果应该与此类似(组合在不同位置的字符串组合):
[ "abc", "-abc", "abc-", "-abc-", "abcdef", "-abcdef", "abcdef-",
"-abcdef-", "abc-def", "-abc-def-", "-abc-def", "abc-def-", "defabc",
"-defabc", "defabc-", "def-abc", "-def-abc", "def-abc-" ]
更新:
上面的例子很简单,通常有2个列表。一个常规字符串是(abc,def,...),另一个包含特殊字符(.- _等),(+可能是resultList)。例如:
regularList = [ "abc", "def", "ghi", ... ]
specialList = [ ".", "-" ,"_" , ",", ... ]
resultList = [ "abc", "def", "abc-", "-abc", "-abc-", ..., "-abc_def-", ... ]
字符串“。”,“ - ”,“_”,...(specialList)绝不应该作为单个字符串出现在最终结果中(例如[“ - ”,“。”,“abc”,“ def“,”abcdef“,...])
我需要组合两个列表,但有一个特殊的例外(如我原来的帖子中所提到的),“specialList”的字符需要位于常规字符串组合的开头,结尾和中间。
最终结果(如前所述)通常看起来像这样:
resultList = [ "abc", "def", "abc-", "-abc", "-abc-", "abc_",
"_abc", "_abc_", "_abc-", "-abc_", ...,
"-abc_def-", "_abc-def_", "abc-def_", ... ]
旁注:
不确定是否需要太多的处理能力/ CPU。这就是为什么我试图逐步遍历“specialList”以获得第一个组合(然后在文件系统上验证它并迭代下一个组合),如我的orig中所述。发布/评论,所以我删除了“specialList”以简化orig中的问题。帖子,但后来我意识到像“-abc_dev-”这样的组合不可能这样,所以我原来的方法/帖子不会像我想的那样工作。
答案 0 :(得分:1)
除了在您的问题中似乎打开连字符数量-
)的问题之外,您可以通过加入所有可能子集的所有可能排列来实现此目的,具体来说:
from itertools import chain, combinations, permutations
def powerset(s):
# https://stackoverflow.com/questions/7988695/getting-the-subsets-of-a-set-in-python
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
>>> mylist = [ "abc", "def", "-" ]
>>> [''.join(x) for subset in powerset(mylist) for x in permutations(subset)]
['',
'abc',
'def',
'-',
'abcdef',
'defabc',
'abc-',
'-abc',
'def-',
'-def',
'abcdef-',
'abc-def',
'defabc-',
'def-abc',
'-abcdef',
'-defabc']
答案 1 :(得分:0)
你想要的是Cartesian Product,你可以通过带有 product()功能的itertool模块实现它:
import itertools
mylist = [ "abc", "def", "-" ]
[p for p in itertools.product(mylist, repeat=3)]