【问题标题】:How can I generate a permutation of a list of lists while maintaining order on the highest level in Python?如何在 Python 中保持最高级别的顺序的同时生成列表列表的排列?
【发布时间】:2015-12-11 19:06:18
【问题描述】:

我正在寻找一种简单的方法来解决这个问题。 假设我有一个列表列表,其中列表中的列表数量不确定:

lists = [
         [[1,2,3,4],[2,3,4,5]],
         [[1,2,3,4],[2,3,4,5],[3,4,5,6]],
         [[1,2,3,4]],
         [[1,2,3,4],[2,3,4,5]]
         ]

我现在想不通的是生成所有可能组合的排列,同时保持lists 的第一级以相同的顺序。我弄乱了嵌套的for 循环和any() 函数,但收效甚微。嵌套的 for 循环不起作用,因为实际上,len(lists) 要大得多,并且会占用 len(lists) 数量的 for 循环。有人有什么想法吗?

在上面的例子中,一些可能的排列是:

[[1,2,3,4],
 [1,2,3,4],
 [1,2,3,4],
 [1,2,3,4]]

[[1,2,3,4],
 [1,2,3,4],
 [1,2,3,4],
 [2,3,4,5]]

[[2,3,4,5],
 [1,2,3,4],
 [1,2,3,4],
 [2,3,4,5]]

[[2,3,4,5],
 [3,4,5,6],
 [1,2,3,4],
 [2,3,4,5]]

【问题讨论】:

  • 那些在我看来不像排列;顺序似乎没有改变。它看起来更像是您想要使用笛卡尔积,在这种情况下,这是许多 itertools.product 问题的重复。
  • @DSM 你是绝对正确的。由于我的物理背景,这尤其令人尴尬。谢谢!

标签: python list permutation


【解决方案1】:

正如@DSM 建议的那样,您可能正在寻找笛卡尔积。排列意味着不同的东西。

>>> import pprint, itertools as it
>>> lists = [
...          [[1,2,3,4],[2,3,4,5]],
...          [[1,2,3,4],[2,3,4,5],[3,4,5,6]],
...          [[1,2,3,4]],
...          [[1,2,3,4],[2,3,4,5]]
...          ]
>>> pprint.pprint(list(it.product(*lists)))
[([1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]),
 ([1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5]),
 ([1, 2, 3, 4], [2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4]),
 ([1, 2, 3, 4], [2, 3, 4, 5], [1, 2, 3, 4], [2, 3, 4, 5]),
 ([1, 2, 3, 4], [3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]),
 ([1, 2, 3, 4], [3, 4, 5, 6], [1, 2, 3, 4], [2, 3, 4, 5]),
 ([2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]),
 ([2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5]),
 ([2, 3, 4, 5], [2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4]),
 ([2, 3, 4, 5], [2, 3, 4, 5], [1, 2, 3, 4], [2, 3, 4, 5]),
 ([2, 3, 4, 5], [3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]),
 ([2, 3, 4, 5], [3, 4, 5, 6], [1, 2, 3, 4], [2, 3, 4, 5])]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2013-11-28
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多