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

Jim*_*rth 14 python permutation

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

例如,给出一个列表:

list = ['a','b','c','d','e','f','g','h','i','j']
Run Code Online (Sandbox Code Playgroud)

我想生成一个包含所有可能的3项组合的列表列表:

['a','b','c'],
['a','b','d'],
['a','b','e']
Run Code Online (Sandbox Code Playgroud)

排列不应在排列中使用相同的项目两次,但顺序很重要并且表示应包括的不同排列,例如,

['a','b','c'],
['a','c','b']
Run Code Online (Sandbox Code Playgroud)

两者都应该包括在内.

"3"是我想要生成的排列的神奇长度,但我不会小看任意长度排列的解决方案.

谢谢你的帮助!

Ned*_*der 18

itertools.permutations(my_list, 3)
Run Code Online (Sandbox Code Playgroud)


小智 14

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

from itertools import permutations
for i in permutations(your_list, 3):
    print i
Run Code Online (Sandbox Code Playgroud)


Ima*_*anB 13

如果您需要长度为 n 的列表(其中 n 可能大于列表元素)以及重复元素的所有组合:

import itertools
list(itertools.product([-1,1], repeat=3))
Run Code Online (Sandbox Code Playgroud)

[(-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]