2013-11-08 1 views
1

Я пытаюсь вывести все комбинации список с определенными ограничениями:Список всех комбинаций (Python)

Мне нужно печатать все комбинации длины х с областью 1 у.

Например, пусть x = 3 и область y = 4. Мне нужно, чтобы генерировать все возможные комбинации 1 до 4 с 3 членов, нет повторений:

[1,2,3] 
[2,3,4] 
[1,2,4] 
[1,3,4] 

Я знаю, что это должно быть у выбрать х, но его трудно понять, как петли, чтобы найти все комбинации.

Использование itertools Я знаю, как генерировать все комбинации длиной х данного списка:

import itertools 
print list(itertools.combinations([1,2,3],2)) 

, но я потерял о том, как я должен генерировать все комбинации с определенным доменом.

+3

'лист (itertools.combinations (диапазон (1, Y + 1), х))'? –

+0

Ну, теперь я чувствую себя глупо. Как мне преобразовать() в []? –

+1

как насчет 'map (list, list_of_combinations)'? – oleg

ответ

3

Чтобы создать список от 1 до y, используйте range(1, y+1). С этим знанием, оно должно быть довольно просто взять текущую itertools знания и применить его к задаче:

import itertools 
print list(itertools.combinations(range(1, y+1), x)) 

Чтобы получить каждый результат в виде списка вместо кортежа, вы можете использовать список понимание:

print [list(x) for x in itertools.combinations(range(1, y+1), x)] 

Или альтернатива с помощью map():

print map(list, itertools.combinations(range(1, y+1), x))