2012-02-18 3 views
9

Примечание: Я работаю над python.Как создать перестановки длины LEN с учетом списка N элементов?

Например, если список:

list = ['a','b','c','d','e','f','g','h','i','j'] 

Я хочу, чтобы создать список списков со всеми возможными комбинациями 3-элементов:

['a','b','c'], 
['a','b','d'], 
['a','b','e'] 

Перестановки не должны использовать один и тот же элемент в два раза в перестановке, но порядок важен и представляет собой различные перестановки, которые должны быть включены, например,

['a','b','c'], 
['a','c','b'] 

Должны ли оба включены.

«3» - это длина магии для перестановок, которые я ищу для генерации, но я бы не посмотрел на решение для произвольных перестановок длины.

Спасибо за помощь!

+1

Вы задумывались над проблемой вообще? Есть ли момент, когда вы застреваете? – simchona

+2

Ненавижу говорить об этом, но googling «список перестановок python» дал http://docs.python.org/library/itertools.html. – simchona

+0

Кто-то еще ответил уже, но да, я подумал об этом, но после других аспектов проекта, к которым это относится, я пошел в мозговой замок и не мог продумать метод грубой силы с большим количеством уродство. – Promethean

ответ

13
itertools.permutations(my_list, 3) 
+0

Ahh, спасибо! Я не знал об этом модуле! Это то, что я получаю за то, что не поддерживаю текущие изменения новой версии! (Мое программирование - это несколько небольших программ в год) – Promethean

12

Предполагая, что вы находитесь в Python 2.6 или более поздней версии:

from itertools import permutations 
for i in permutations(your_list, 3): 
    print i 
+0

Спасибо, я продолжаю говорить о дистрибутиве с 3.2, но мое обучение было до 2.2, поэтому я не знал об этом. – Promethean

+0

Itertools - ваш друг! – michaelfilms

+0

Иисус инструменты в питоне удивительны. Представьте, что вы делаете это на C или C++ –

0

Вы должны использовать функцию permutations из itertools модуля.

>>> import itertools 
>>> lst = ['a','b','c','d','e','f','g','h','i','j'] 
>>> itertools.permutations(lst, 3) 

Или, если вы действительно хотите, чтобы получить комбинации, а затем использовать функцию combinations.

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