2017-12-27 352 views
-1

名单更换项目比方说,我有一个列表或类型的数组:在所有可能的排列

mylist = [1, 2, 3, 4] 

而且我要在此列表中替换的项目。通常我会使用类似以下的东西:

mylist[2] = 7 

这很好。但是,有人可以解释如何在替换mylist中的一个或多个项目时创建所有可能的mylist排列。例如,我想创建以下文件:

[7, 2, 3, 4] 
[7, 7, 3, 4] 
[7, 2, 7, 4] 
[7, 7, 7, 4] 
[7, 2, 3, 7] 
...(and so on) 

我知道我可以使用itertools生成所有可能的排列,但我怎么可以指定我想在列表生成之前在所有可能的位置取代一个项目排列?这里是我试图用itertools

list(itertools.permutations([1,2,3,4,7], 4)) 

这不起作用,因为它不按置换替代7超过一次,而且它也产生置换不包括数量7

+0

你的例子似乎表明你想用你的例子中的值('7')代替列表中的至少一个项目,同时留下未替换的项目。你是这个意思吗?那么在你的例子中,结果中会有15个列表? –

+1

我不明白你在一些结果列表中如何得到两到三个七次方。 – timgeb

+0

这个问题很难解释。我正在寻找替代所有可能的位置,从而生成排列列表。我试图用这种方式解释它,因为我专注于使用itertools.permutations来解决这个问题。也许这不是正确的措辞。 – Alligator

回答

3

使用itertools.combinations找到指数更换:

replace = 7 
mylist = [1, 2, 3, 4] 
for i in range(1, len(mylist) + 1): 
    for selected in itertools.combinations(range(len(mylist)), i): 
     res = mylist[:] 
     for n in selected: 
      res[n] = replace 
     print(res) 

输出:

[7, 2, 3, 4] 
[1, 7, 3, 4] 
[1, 2, 7, 4] 
[1, 2, 3, 7] 
[7, 7, 3, 4] 
[7, 2, 7, 4] 
[7, 2, 3, 7] 
[1, 7, 7, 4] 
[1, 7, 3, 7] 
[1, 2, 7, 7] 
[7, 7, 7, 4] 
[7, 7, 3, 7] 
[7, 2, 7, 7] 
[1, 7, 7, 7] 
[7, 7, 7, 7] 
+0

虽然我在二进制表示中移位... :) +1 – splash58

+0

就是这样!有趣的使用itertools.combinations。谢谢。 – Alligator

0

您可以创建一个功能,你只需要把这个清单和价值,该功能,你会得到你想要的东西:

import itertools 
def replaced_it(list_1,value): 

    final_list = [] 
    len_=len(list_1) 
    track_index = [k for k, j in enumerate(list_1)] 
    for i in range(len(track_index) + 1): 


     empty_list = [value] 
     replaced_one = list_1[:] 
     for ia in itertools.permutations(track_index, r=i): 
      if ia: 
       for i, j in zip(ia, empty_list * len(ia)): 
        replaced_one[i] = j 
       if replaced_one not in final_list: 
        final_list.append(replaced_one) 
       replaced_one = list_1[:] 






    return final_list 

print(replaced_it([1,2,3,4],7)) 

输出:

[[7, 2, 3, 4], [1, 7, 3, 4], [1, 2, 7, 4], [1, 2, 3, 7], [7, 7, 3, 4], [7, 2, 7, 4], [7, 2, 3, 7], [1, 7, 7, 4], [1, 7, 3, 7], [1, 2, 7, 7], [7, 7, 7, 4], [7, 7, 3, 7], [7, 2, 7, 7], [1, 7, 7, 7], [7, 7, 7, 7]]