Python中的特定选择和排列

时间:2018-10-22 18:26:34

标签: python permutation

  

我想要这样的东西,有人可以帮我吗?
  some_function([1,2],3):      print([1,1,1])

`print([1,1,2])`  

print([1,2,1])
   print([2,1,1])

print([1,2,2])    print([2,1,2])
    print([2,2,1])

`print([2,2,2])  `

1 个答案:

答案 0 :(得分:3)

我将这个问题解释为“我如何编写一个可以赋予[1,2]和3的函数,并取回具有该长度的那些元素的所有组合?例如(1、1、1) ,(1、1、2),(1、2、1),(1、2、2),(2、1、1),(2、1、2),(2、2、1),( 2,2,2)”。您可以使用Documentation

>>> import itertools
>>> list(itertools.product([1,2], repeat=3))
[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

如果出于某种原因而不想导入模块来完成此操作,则文档方便地提供了仅需要内置函数的实现:

def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)