2014-09-17 5 views
-2

У меня есть массив следующим образом:Вычисление перестановок в python?

l = [1, 4, 6, 3, 2]

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

Например, я могу взять с собой: [1,4,6] или [3,2] или [1,5] или [1,4,6,3,2] и т.д.

Что такое лучший способ сделать это в Python? Является ли это проблемой, когда я могу использовать библиотеку itertools?

+0

Привет, сначала попросите Google! https://docs.python.org/3.5/library/itertools.html – starrify

+0

комбинация или перестановка - в перестановке [1,2] отличается от [2,1] в сочетании они эквивалентны –

ответ

1

Определенно использовать itertools:

l = [1, 4, 6, 3, 2] 
for length in range(2, len(l)+1): 
    for p in itertools.permutations(l, length) 
     print p 

Есть много из них

3
  • itertools.permutations будет возвращать все перестановки заданной длины.
  • itertools.combinations вернет все комбинации заданной длины.

Какой вы хотите, зависит от того, беспокоит ли вы о заказе или нет - (1, 2) и (2, 1) различные перестановки, но та же комбинация.

Вы можете связать это с itertools.chain для создания итерации всех перестановок/комбинаций всех длин.

from itertools import chain, permutations, combinations 

# Note: if you want to include the empty combo/permutation, change the first 
#  argument of the range() calls to 0. 
all_length_perms = chain(permutations(l, n) for n in range(1, len(l)+1)) 
all_length_combos = chain(combinations(l, n) for n in range(1, len(l)+1)) 

# Example usage once you have the iterable... 
for perm in all_length_perms: 
    print(perm) 
+0

Я должен научиться использовать цепочка :-) –

0

Используйте itertools модуль

короткий неразборчиво Ответ:

from itertools import chain, combinations 
l = [1, 4, 6, 3, 2] 
all_combinations = [i for i in chain(*(combinations(l, j) for j in range(len(l)+1)))] 

объяснение:

combinations(iterable, r) --> combinations object 

Return successive r-length combinations of elements in the iterable. 

нам нужно, чтобы получить комбинацию для г = 0 до LEN (л) + 1 мы используем цепочку для объединения каждой из комбинаций

Смежные вопросы