注意:我正在使用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”是我想要生成的排列的魔术长度,但我不会小看任意长度排列的解决方案。
感谢您的帮助!
答案 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
函数。