2014-11-19 2 views
-4

С учетом перечня: Пример: [1,2,3,4].Возможные комбинации списка в Python

Распечатать: [], [1], [1,2], [1,2,3], [1,2,3,4], [2], [2,3], [2,3,4] и т. Д.

В принципе, нам нужно получить все комбинации.

+1

вы хотите все комбинации или последовательные комбинации ??? – Hackaholic

+0

Являются ли ваши входные значения всегда последовательными? – Akavall

ответ

0

Это сообщение объясняет, как: How to get all possible combinations of a list’s elements?

[[x for x in itertools.combinations([1,2,3,4], y)] for y in range(4)] 

Это обеспечит ответ. itertools.combinations([1,2,3,4], y) предоставит все комбинации элементов y. range(4) предоставит диапазон от 1 до 4 Вложенное понимание списка выполняет итерацию по количеству элементов для объединения и самих комбинаций.

Выход:

[[()], 
[(1,), (2,), (3,), (4,)], 
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)], 
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]] 

Тогда мы можем придавить список с chain.from_iterable, как указано в этом сообщении: Making a flat list out of list of lists in Python

list(itertools.chain.from_iterable([[x for x in itertools.combinations([1,2,3,4], y)] for y in range(4)])) 

Окончательный вывод:

[(), (1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)] 
1

с использованием itertools.combinations :

>>> import itertools 
>>> my_list = [1,2,3,4] 
>>> [ list(x) for i in range(len(my_list)+1) for x in itertools.combinations(my_list,i) ] 
[[], [1], [2], [3], [4], [1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4]] 

если вы хотите подряд:

>>> [[]]+[ my_list[i:j] for i in range(len(my_list)) for j in range(i+1,len(my_list)+1) ] 
[[], [1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [2], [2, 3], [2, 3, 4], [3], [3, 4], [4]] 
+0

В ваше решение входят подлисты типа '[1,4]', в то время как кажется, что OP ищет подсписки, у которых есть только последовательные целые числа. – Akavall

+0

yep OP не ясен, вы можете быть правы – Hackaholic

+0

@Akavall, но OP также упомянул, что нужно получить всю комбинацию – Hackaholic

0

Если входные значения всегда последовательно, вы можете попробовать следующую идею:

result = [] 

for i in xrange(1, 6): 
    for j in xrange(1, 6): 
     if i > j: 
      result.append(range(j, i)) 

print [[]] + sorted(result) 

Результат:

[[], [1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [2], [2, 3], [2, 3, 4], [3], [3, 4], [4]] 
Смежные вопросы