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

6

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


可能是重复的问题:如何在Python中生成列表的所有排列 - Ken Redler
4个回答

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
也许可以添加一个链接到http://docs.python.org/library/itertools.html#itertools.permutations? - Jordan Gray

5
您正在寻找排列组合,以下内容应该可以满足您的需求:
import itertools
itertools.permutations([2,3,4])

2
一项伟大的彩票程序的开始,但数据格式如下所示。
ist(permutations([2, 3, 4],[7,2,5],[8,1,4,9]))

问题在于第一组仅用于创建第一列中的数字,第二组用于第二列,第三组用于第三列。
输出结果将是一组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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接