如果给出N个项目列表,如何生成长度为LEN的排列?

时间:2012-02-18 02:44:57

标签: python permutation

注意:我正在使用python工作。

例如,给出一个列表:

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”是我想要生成的排列的魔术长度,但我不会小看任意长度排列的解决方案。

感谢您的帮助!

4 个答案:

答案 0 :(得分:17)

itertools.permutations(my_list, 3)

答案 1 :(得分:13)

假设您使用的是python 2.6或更高版本:

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

答案 2 :(得分:3)

如果您需要长度为 n 的列表的所有组合,其中 n 可能大于列表元素,并且还需要重复元素:

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)]

想象一个像 [-1,1]x[-1,1]x[-1,1] 的笛卡尔积

答案 3 :(得分:1)

您应该使用itertools模块中的permutations功能。

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

或者,如果您真的想获得组合,请使用combinations函数。