J'ai de la difficulté à créer une liste 2D de permutations. Voici un code minimal pour reproduire le problèmeJ'ai des difficultés à créer une liste/tableau 2D
class Solution:
def permute(self, A):
A = sorted(A)
print A
A_out = []
A_out.append(A)
for iter0 in range(4):
A[0] = A[0] + 1
print A
A_out.append(A)
return A_out
sol = Solution()
A = [1, 2, 3]
print sol.permute(A)
Pour cette entrée particulière (1, 2, 3) la sortie est
[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[4, 2, 3]
[5, 2, 3]
[[5, 2, 3], [5, 2, 3], [5, 2, 3], [5, 2, 3], [5, 2, 3]]
mais la sortie désirée est
[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[4, 2, 3]
[5, 2, 3]
[[1, 2, 3], [2, 2, 3], [3, 2, 3], [4, 2, 3], [5, 2, 3]]
I pense qu'il a quelque chose à faire de copie profonde/chose de copie superficielle mais je ne suis pas sûr de savoir comment corriger cela car je ne suis pas très familier avec Python. Comment puis-je le réparer?
Merci pour la création d'un exemple minimal. Mais en référence à votre algorithme original de permutation maker: il existe un générateur de permutation rapide dans le module standard [itertools] (https://docs.python.org/2/library/itertools.html#itertools.permutations). Cependant, contrairement à votre code, 'itertools.permutations()' produira des permutations en double si l'entrée itérable contient des éléments répétés. Il est assez facile d'utiliser un ensemble pour les filtrer, mais cela devient inefficace, surtout si l'entrée itérable a plusieurs valeurs répétées. –
FWIW, vous pourriez aussi être intéressé par [ce code de permutation] (http://stackoverflow.com/a/31678111/4014959). –
@ PM2Ring: Je sais à propos de itertools.permutations() mais la question que j'essayais de résoudre spécifiquement a demandé de ne pas utiliser itertools.permutations() –