Frage

Ich versuche, alle möglichen Permutationen von einer Liste von Zahlen angezeigt werden, zum Beispiel, wenn ich 334 habe ich mag zu bekommen:

3 3 4
3 4 3
4 3 3

Ich muß in der Lage sein, dies von Ziffern für jede Menge zu tun, bis zu etwa 12 Ziffern lang sein.

Ich bin sicher, dass seine wahrscheinlich ziemlich einfach so etwas wie itertools.combinations verwenden, aber ich kann nicht ganz die Syntax richtig machen.

TIA Sam

War es hilfreich?

Lösung

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

Andere Tipps

ohne 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

Ausgang

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

Sie wollen Permutationen, nicht Kombinationen. Siehe: Wie alle Permutationen von einer Liste in Python generieren

>>> 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)]

Beachten Sie, dass es die beiden 3s ist Permutation (das ist die richtige Sache mathematisch zu tun), aber es ist nicht das gleiche wie Ihr Beispiel. Dies wird nur einen Unterschied machen, wenn es Zahlen in der Liste dupliziert werden.

würde ich Python itertools verwenden, aber wenn Sie hatte diese selbst zu implementieren, hier der Code, gibt alle Permutationen einer bestimmten Größe für eine Werteliste.

Beispiel: 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top