32

Note: I'm working in python on this.

For example, given a list:

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

I want to generate a list of lists with all possible 3-item combinations:

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

The permutations should not use the same item twice in a permutation, but the order is important and represents distinct permutations that should be included, e.g.,

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

Should both be included.

"3" is the magic length for the permutations I'm looking to generate, but I wouldn't look down on a solution for arbitrary length permutations.

Thanks for any help!

Odj fourth
  • 649
  • 1
  • 9
  • 16
  • 2
    Have you thought about the problem at all? Is there a point where you're getting stuck? – simchona Feb 18 '12 at 02:47
  • 3
    I hate to say it, but googling "permutations python list" gave http://docs.python.org/library/itertools.html. – simchona Feb 18 '12 at 02:49
  • Someone else answered already, but yeah, I'd given it some thought, but after other aspects of the project to which this is related, I've gone into brain lock and couldn't think past a brute force method with lots of ugliness. – Odj fourth Feb 18 '12 at 02:53

4 Answers4

36
itertools.permutations(my_list, 3)
toriningen
  • 7,196
  • 3
  • 46
  • 68
Ned Batchelder
  • 364,293
  • 75
  • 561
  • 662
19

Assuming you're in python 2.6 or newer:

from itertools import permutations
for i in permutations(your_list, 3):
    print i
michaelfilms
  • 704
  • 3
  • 5
13

In case you need all combinations of a list with length n where n may be larger than the list elements, and also with repeated elements:

import itertools
list(itertools.product([-1,1], repeat=3))

[(-1, -1, -1), (-1, -1, 1), (-1, 1, -1), (-1, 1, 1), (1, -1, -1), (1, -1, 1), (1, 1, -1), (1, 1, 1)]

imagine a cartesian product like [-1,1]x[-1,1]x[-1,1]

ImanB
  • 275
  • 3
  • 7
4

You should use the permutations function from the itertools module.

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

Or, if you really want to get combinations, then use the combinations function.

toriningen
  • 7,196
  • 3
  • 46
  • 68
cocoatomo
  • 5,432
  • 2
  • 14
  • 12