不寻常的排列

时间:2016-08-28 09:54:44

标签: python algorithm combinations permutation

我的名单很少:

a = [1,2,3]
b = [4,5,6]
c = [7,8,9,10]

如何生成所有组合,如:

a[0], b[0]
a[1], b[1]
a[2], b[2]
a[0], b[0], c[0]
a[1], b[1], c[0]
a[2], b[2], c[0]
a[1], b[1], c[1]
a[2], b[2], c[2]
a[0], b[0], c[3]
a[1], b[1], c[3]
a[2], b[2], c[3]
.....

每个列表一次只能有一个值。

想象一下两个或多个列表如a = [1,2,3]和b = [4,5,6]和c = [7,8,9]我希望所有可能的对像(a [0 ],[b [0]),(a [1],b [1]),(a [0],b [0],c [0])......

2 个答案:

答案 0 :(得分:1)

根据您的示例,您似乎只想要Bitmap - 类型排列。所以你要么:1)明确地构建你的“排列”,或2)构建所有排列并过滤掉你不想要的那些。

明确构建

  1. 构建您的abc,即list_of_lists
  2. 建立你的排列。使用[['a1', 'a2', 'a3'], ['b1', 'b2'], ['c1']],请参阅All combinations of a list of lists
  3. 从每个排列中,您可能希望在循环中创建多个排列。例如,来自itertools.product获取('a1','b1','c1')('a1','b1','c1')。这很容易。
  4. 你可以填补空白。

    构建所有内容并过滤掉

    ...如果你需要的东西(稍微)与我理解的东西不同,可能只是有用。

答案 1 :(得分:0)

不确定我是否正确理解了您的问题,但您的意思是这个吗?

from itertools import permutations

my_list = ['a1', 'a2', 'a3', 'b1', 'b2', 'c1']

for i in range(len(my_list)):
    print(list(permutations(my_list, i)))