Question

Je suis en train d'afficher toutes les permutations possibles d'une liste de numéros, par exemple, si je 334 je veux obtenir:

3 3 4
3 4 3
4 3 3

Je dois pouvoir le faire pour un ensemble de chiffres jusqu'à 12 chiffres.

Je suis sûr qu'il ya probablement assez simple en utilisant quelque chose comme itertools.combinations mais je ne peux pas tout à fait obtenir le droit de syntaxe.

TIA Sam

Était-ce utile?

La solution

>>> lst = [3, 3, 4]
>>> import itertools
>>> set(itertools.permutations(lst))
{(3, 4, 3), (3, 3, 4), (4, 3, 3)}

Autres conseils

sans itertools

def permute(LIST):
    length=len(LIST)
    if length <= 1:
        yield LIST
    else:
        for n in range(0,length):
             for end in permute( LIST[:n] + LIST[n+1:] ):
                 yield [ LIST[n] ] + end

for x in permute(["3","3","4"]):
    print x

output

$ ./python.py
['3', '3', '4']
['3', '4', '3']
['3', '3', '4']
['3', '4', '3']
['4', '3', '3']
['4', '3', '3']

Vous voulez permutations, combinaisons non. Voir: Comment générer toutes les permutations d'une liste en Python

>>> from itertools import permutations
>>> [a for a in permutations([3,3,4])]
[(3, 3, 4), (3, 4, 3), (3, 3, 4), (3, 4, 3), (4, 3, 3), (4, 3, 3)]

Notez qu'il est permutant les deux 3 années (ce qui est mathématiquement bonne chose à faire), mais pas le même que votre exemple. Cela ne fera une différence si des numéros dupliqués dans votre liste.

J'utilise le itertools de python, mais si vous deviez mettre en œuvre vous-même, le code est ici qui renvoie toutes les permutations d'une taille spécifiée pour une liste de valeurs.

Exemple: values = [1,2,3], size = 2 => [[3, 2], [2, 3], [2, 1], [3, 1], [1, 3], [1, 2]]

def permutate(values, size):
  return map(lambda p: [values[i] for i in p], permutate_positions(len(values), size))

def permutate_positions(n, size):
  if (n==1):
    return [[n]]

  unique = []
  for p in map(lambda perm: perm[:size], [ p[:i-1] + [n-1] + p[i-1:] for p in permutate_positions(n-1, size) for i in range(1, n+1) ]):
    if p not in unique:
      unique.append(p)

  return unique
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top