Odj fourth
Odj fourth

Reputation: 709

How do I generate permutations of length LEN given a list of N Items?

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!

Upvotes: 35

Views: 40764

Answers (4)

ImanB
ImanB

Reputation: 433

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]

Upvotes: 13

Ned Batchelder
Ned Batchelder

Reputation: 375584

itertools.permutations(my_list, 3)

Upvotes: 37

cocoatomo
cocoatomo

Reputation: 5492

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.

Upvotes: 4

michaelfilms
michaelfilms

Reputation: 724

Assuming you're in python 2.6 or newer:

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

Upvotes: 18

Related Questions