С учетом перечня: Пример: [1,2,3,4].Возможные комбинации списка в Python
Распечатать: [], [1], [1,2], [1,2,3], [1,2,3,4], [2], [2,3], [2,3,4] и т. Д.
В принципе, нам нужно получить все комбинации.
С учетом перечня: Пример: [1,2,3,4].Возможные комбинации списка в Python
Распечатать: [], [1], [1,2], [1,2,3], [1,2,3,4], [2], [2,3], [2,3,4] и т. Д.
В принципе, нам нужно получить все комбинации.
Это сообщение объясняет, как: 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)]
с использованием 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]]
В ваше решение входят подлисты типа '[1,4]', в то время как кажется, что OP ищет подсписки, у которых есть только последовательные целые числа. – Akavall
yep OP не ясен, вы можете быть правы – Hackaholic
@Akavall, но OP также упомянул, что нужно получить всю комбинацию – Hackaholic
Если входные значения всегда последовательно, вы можете попробовать следующую идею:
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]]
вы хотите все комбинации или последовательные комбинации ??? – Hackaholic
Являются ли ваши входные значения всегда последовательными? – Akavall