/ / Python - tworzy specyficzną listę permutacji z określonym wzorem (dodaj do itertools) - python, lista, matematyka, permutacja, itertools

Python - tworzy specyficzną listę permutacji o określonym wzorze (dodaj do itertools) - python, list, matma, permutacja, itertools

Staram się znaleźć sposób na napisanie skryptu Pythona, w którym mogę utworzyć plik zawierający listę wpisów (ciągów), które są permutacjami konkretnych wejść.

Wyobraź sobie, że masz 9 cyfr w łańcuchu. Ale jedyna możliwa wartość w każdej cyfrze mieści się w zakresie 0123456789. Chcę więc, aby wszystkie permutacje 0123456789 nad 9 cyframi ... i lista ciągów wszystkich tych permutacji (tj. 1000 000 000 możliwych permutacji).

Prosty sposób na użycie itertools.permutations prawda? Nie. Zgodnie z oficjalną dokumentacją:

def permutations(iterable, r=None):
# permutations("ABCD", 2) --> AB AC AD BA BC BD CA CB CD DA DB DC

Jeśli przyjrzysz się bliżej wynikom, nie mapowtarza ... więc nie ma przypadków powiedzenia AA lub BB. Oznacza to, że jeśli spróbuję uruchomić wszystkie permutacje 0123456789 ponad 9 cyfr, nie otrzymam kombinacji „11111111” lub „111222333”.

Czy nie rozumiem tutaj modułu itertools? Co mogę zrobić, aby utworzyć plik z listą ciągów wszystkich możliwych permutacji „0123456789” powyżej 9 cyfr?

Odpowiedzi:

4 dla odpowiedzi № 1

W normalnych terminach matematycznych "AA" jest nie za permutacja z "ABCD". Może zamiast tego szukasz produktu kartezjańskiego - i itertools też to popiera. Na przykład:

>>> for x in it.product("ABC", repeat=len("ABC")): print(x)
("A", "A", "A")
("A", "A", "B")
("A", "A", "C")
("A", "B", "A")
("A", "B", "B")
("A", "B", "C")
("A", "C", "A")
("A", "C", "B")
("A", "C", "C")
("B", "A", "A")
("B", "A", "B")
("B", "A", "C")
("B", "B", "A")
("B", "B", "B")
("B", "B", "C")
("B", "C", "A")
("B", "C", "B")
("B", "C", "C")
("C", "A", "A")
("C", "A", "B")
("C", "A", "C")
("C", "B", "A")
("C", "B", "B")
("C", "B", "C")
("C", "C", "A")
("C", "C", "B")
("C", "C", "C")

Zauważ, że te zdecydowanie nie są permutacjami -liczba permutacji 3 przedmiotów to 3 silnie, tj. 6, podczas gdy liczba tych przedmiotów w kartezjańskim iloczynie 3 kopii sekwencji 3-elementowej wynosi 3 do trzeciej potęgi, AKA 81. Różnica!


0 dla odpowiedzi nr 2

Dla każdego, kto szuka czegoś podobnego, jest to kod, który napisałem. Działa w porządku.

import itertools

print ("")
characters = input("Characters to include: ")
length = input("Length of each combination: ")
filename = input("Name of list file: ")
print ("")

length = int(length)

f1 = open(filename, "w")
for p in itertools.product(characters,repeat=length):
f1.write("".join(str(x) for x in p) + "n")
f1.close()