わかりました、私は今それを手に入れたと思います。これはあなたが探していたものですか?
>>> list_string = [ "aaa", "bb", "cc", "dd", "ee"]
>>> str_len = 6
>>> [[''.join(list_string[:i]), ''.join(list_string[i:])] for i in xrange(len(list_string)) if all(1 <= len(s) <= str_len for s in [''.join(list_string[:i]), ''.join(list_string[i:])])]
[['aaabb', 'ccddee']]
これにより、文字列の1つのパーティション化で機能した可能性のあるすべての組み合わせが生成されます。考えられるすべての結果は次のとおりです。
>>> for str_len in range(len(''.join(list_string))):
print str_len, [[''.join(list_string[:i]), ''.join(list_string[i:])] for i in xrange(len(list_string)) if all(1 <= len(s) <= str_len for s in [''.join(list_string[:i]), ''.join(list_string[i:])])]
0 []
1 []
2 []
3 []
4 []
5 []
6 [['aaabb', 'ccddee']]
7 [['aaabb', 'ccddee'], ['aaabbcc', 'ddee']]
8 [['aaa', 'bbccddee'], ['aaabb', 'ccddee'], ['aaabbcc', 'ddee']]
9 [['aaa', 'bbccddee'], ['aaabb', 'ccddee'], ['aaabbcc', 'ddee'], ['aaabbccdd', 'ee']]
10 [['aaa', 'bbccddee'], ['aaabb', 'ccddee'], ['aaabbcc', 'ddee'], ['aaabbccdd', 'ee']]
編集:これはfilter
、式で結果を2回使用するが複製しないバージョンであり、より適切なフォーマットになっています。
>>> filter(
lambda res: all(1 <= len(s) <= str_len for s in res),
[[''.join(list_string[:i]), ''.join(list_string[i:])]
for i in xrange(len(list_string))])
[['aaabb', 'ccddee']]