2013-10-15 1 views
2

В настоящее время я пишу программу, которая использует itertools, и одна ее часть не работает должным образом. Я хотел бы, чтобы входные данные определяли длину списков, выходы функции перестановки равны длине списка, из которого он генерирует свои выходы. Другими словами, у меня естьPython Itertools Permutations

import itertools 

b = 0 
c = 9 
d = [0,1,2] 
e = len(d) 


while b < c: 
     d.append(b) 
     b = b+1 

print([x for x in itertools.permutations(d,e)]) 

И я хотел бы, чтобы генерировать все возможные перестановки г, равные этой длине. Я экспериментировал с этим, и кажется, что второй определитель должен быть целым числом. Я даже попытался создать новую переменную f, и имел f = int(e), а затем заменил e на f в заявлении печати, но безуспешно. С любым из них все, что я получил, было [()]

Спасибо за вашу помощь.

+2

'[х for x in ...] '- это то же самое, что и' list (...) '- нет необходимости в понимании списка. –

+2

Прекрасно работает для меня ... Это ваш код? Вы пробовали просто 3 вместо e? – sashkello

ответ

4

Вам необходимо установить eпосле вы строите список. len(d) возвращает значение, а не ссылку на длину списка.

d = range(0,9) # build an arbitrary list here 
       # this creates a list of numbers: [0,1,2,3,4,5,6,7,8] 
e = len(d) 
print list(itertools.permutations(d, e)) 

Заметим, что число перестановок очень велико, поэтому хранить их все в списке будут потреблять большие объемы памяти - вы бы лучше с этим:

d = range(0,9) 
e = len(d) 
for p in itertools.permutations(d, e): 
    print p