2017-12-27 347 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]]