如何在列表中查找所有可能的元素序列?

时间:2012-01-27 22:32:07

标签: python

我有一个清单[2,3,4]。如何在列表中找到所有可能的元素序列? 所以输出应该是: [2,3,4] [2,4,3] [3,2,4] [3,4,2] [4,2,3] [4,3,2]

4 个答案:

答案 0 :(得分:21)

您可以使用itertools.permutations()

轻松完成此操作
>>> from itertools import permutations
>>> list(permutations([2, 3, 4]))
[(2, 3, 4), (2, 4, 3), (3, 2, 4), (3, 4, 2), (4, 2, 3), (4, 3, 2)]

如果由于某种原因你需要列表而不是元组:

>>> map(list, permutations([2, 3, 4]))
[[2, 3, 4], [2, 4, 3], [3, 2, 4], [3, 4, 2], [4, 2, 3], [4, 3, 2]]

答案 1 :(得分:5)

你正在寻找排列,这样的事情应该有效:

import itertools
itertools.permutations([2,3,4])

答案 2 :(得分:2)

一个伟大的彩票计划的开始,除了数据将这样格式化

ist(permutations([2, 3, 4],[7,2,5],[8,1,4,9]))

问题是第一组仅用于在第一列中创建数字 secound用于2列,3rd用于第3列

输出将是一组3个数字,只是排列不同

答案 3 :(得分:1)

你知道吗:

def unique_perms(elems):
    """returns non-duplicate permutations 
       if duplicate elements exist in `elems`
    """
    from itertools import permutations
    return list(set(permutations(elems)))

但如果你做的是这样的话:

print len(unique_perms(elems))

然后试试这个:

def fac(n):
    """n!"""
    if n == 1: return n
    return n * fac(n -1)

def unique_perm_count(elems)
    n = len(elems)
    return fac(2 * n) / fac(n) ** 2