【问题标题】:How do I generate permutations of length LEN given a list of N Items?给定 N 个项目的列表,如何生成长度 LEN 的排列?
【发布时间】:2012-03-09 10:21:13
【问题描述】:

注意:我正在使用 python 来解决这个问题。

例如,给定一个列表:

list = ['a','b','c','d','e','f','g','h','i','j']

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

['a','b','c'],
['a','b','d'],
['a','b','e']

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

['a','b','c'],
['a','c','b']

都应该包括在内。

“3”是我希望生成的排列的魔法长度,但我不会看不起任意长度排列的解决方案。

感谢您的帮助!

【问题讨论】:

  • 你有没有想过这个问题?有没有卡住的地方?
  • 我不想这么说,但谷歌搜索“permutations python list”给出了docs.python.org/library/itertools.html
  • 其他人已经回答了,但是,是的,我已经考虑过了,但是在与此相关的项目的其他方面之后,我陷入了大脑锁定,无法思考过去一种很丑陋的蛮力方法。
  • 是的,我的 google-fu 在这方面很弱——我没有使用“排列”一词进行搜索,不知道我需要什么。然后,当我在这里输入我的标题并且 stackoverflow 显示了相关问题时,我看到了常用的“排列”一词,但没有想到要返回并在谷歌中包含它。

标签: python permutation


【解决方案1】:
itertools.permutations(my_list, 3)

【讨论】:

  • 啊,谢谢!我不知道那个模块!这就是我没有及时了解新版本更改的结果! (我的编程需求是一年几个小程序)
【解决方案2】:

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

from itertools import permutations
for i in permutations(your_list, 3):
    print i

【讨论】:

  • 谢谢,我一直在使用 3.2 的发行版,但我的学习是 2.2 之前的,所以我没有意识到这一点。
  • 耶稣,python 中的工具很棒。想象一下在 C 或 C++ 中这样做
【解决方案3】:

如果您需要长度为 n 的列表的所有组合,其中 n 可能大于列表元素,并且还包含重复元素:

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

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

【讨论】:

    【解决方案4】:

    您应该使用itertools 模块中的permutations 函数。

    >>> import itertools
    >>> lst = ['a','b','c','d','e','f','g','h','i','j']
    >>> itertools.permutations(lst, 3)
    

    或者,如果你真的想得到组合,那么使用combinations 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多