2012-02-18 11 views
9

Uwaga: Pracuję w Pythonie na ten temat.Jak wygenerować permutacje o długości LEN z podaniem listy N pozycji?

Na przykład, biorąc pod uwagę listę:

list = ['a','b','c','d','e','f','g','h','i','j'] 

Chcę wygenerować listę list ze wszystkich możliwych kombinacji 3-Item:

['a','b','c'], 
['a','b','d'], 
['a','b','e'] 

permutacji nie powinny stosować ten sam element dwa razy w permutacji, ale kolejność jest ważna i reprezentuje różne permutacje, które powinny być zawarte, np.

['a','b','c'], 
['a','c','b'] 

Powinny być uwzględnione.

"3" to magiczna długość permutacji, które zamierzam generować, ale nie spoglądałbym w dół na rozwiązanie dla dowolnych permutacji długości.

Dzięki za pomoc!

+1

Czy w ogóle myślałeś o problemie? Czy jest jakiś moment, w którym utkniesz? – simchona

+2

Nienawidzę tego mówić, ale googling "lista permutacji python" dał http://docs.python.org/library/itertools.html. – simchona

+0

Ktoś inny odpowiedział już, ale tak, zastanawiałem się nad tym, ale po innych aspektach projektu, do których jest to powiązane, przeszedłem do blokady mózgu i nie mogłem myśleć o przeszłości za pomocą metody brutalnej siły z wieloma brzydota. – Promethean

Odpowiedz

13
itertools.permutations(my_list, 3) 
+0

Ahh, dzięki! Nie wiedziałem o tym module! To właśnie dostaję za to, że nie śledzę zmian w nowej wersji! (Moje potrzeby programistyczne to kilka małych programów rocznie). – Promethean

12

Zakładając, że jesteś w Pythonie 2.6 lub nowszej:

from itertools import permutations 
for i in permutations(your_list, 3): 
    print i 
+0

Dzięki, utrzymuję aktualność na dystrybucji w wersji 3.2, ale moja nauka była wcześniejsza niż 2.2, więc nie wiedziałem o tym. – Promethean

+0

Itertools to Twój przyjaciel! – michaelfilms

+0

Jezus narzędzia w Pythonie są niesamowite. Wyobraź sobie, że robisz to w C lub C++ –

0

należy użyć funkcji permutations z modułu itertools.

>>> import itertools 
>>> lst = ['a','b','c','d','e','f','g','h','i','j'] 
>>> itertools.permutations(lst, 3) 

Lub, jeśli naprawdę chcesz, aby uzyskać kombinacje, a następnie użyj funkcji combinations.

Powiązane problemy