2016-08-29 91 views
0

使用下面的列表为例:排列组合拆分成两个串

a = ["cat", "dog", "mouse", "rat", "horse"] 

我可以用itertools.permutations

print (list(itertools.permutations(a, 2))) 

[('cat', 'dog'), ('cat', 'mouse'), ('cat', 'rat'), ('cat', 'horse'), ('dog', 'cat'), ('dog', 'mouse'), ('dog', 'rat'), ('dog', 'horse'), ('mouse', 'cat'), ('mouse', 'dog'), ('mouse', 'rat'), ('mouse', 'horse'), ('rat', 'cat'), ('rat', 'dog'), ('rat', 'mouse'), ('rat', 'horse'), ('horse', 'cat'), ('horse', 'dog'), ('horse', 'mouse'), ('horse', 'rat')] 

但是得到的所有排列,如果我需要得到这个输出以下格式是包含所有项目的列表,其中包含所有项目分为两个字符串,如下所示:

[["cat", "dog mouse rat horse"], ["cat dog", "mouse rat horse"], ["cat dog mouse", "rat horse"], ["cat dog mouse rat", "horse"]] 
+0

是您的预期输出,即使与排列? –

+0

是你想要的输出吗?例如,不是[“狗”,“猫鼠鼠马”]是否有效? – BPL

+0

@BPL是的,你是对的,谢谢 – ade1e

回答

1

切片输入列表和加入字符串可以为你做一份工作。

seq = ["cat", "dog", "mouse", "rat", "horse"] 
seq2 = [[' '.join(seq[:i+1]), ' '.join(seq[i+1:])] for i in range(len(seq)-1)] 
# [['cat', 'dog mouse rat horse'], ['cat dog', 'mouse rat horse'], ['cat dog mouse', 'rat horse'], ['cat dog mouse rat', 'horse']] 
2

这将提供从最初的问题所需的输出:

a = ["cat", "dog", "mouse", "rat", "horse"] 

print[[" ".join(a[0:i]), " ".join(a[i:])] for i in range(1, len(a))] 
1

您可以使用下面的代码来实现这一目标:

>>> a = ["cat", "dog", "mouse", "rat", "horse"] 
>>> my_perm_list = [] 
>>> for i in range(len(a)-1): 
...  my_perm_list.append((' '.join(a[:i+1]), ' '.join(a[i+1:]))) 
... 
>>> my_perm_list 
[('cat', 'dog mouse rat horse'), ('cat dog', 'mouse rat horse'), ('cat dog mouse', 'rat horse'), ('cat dog mouse rat', 'horse')]