【问题标题】:Iterate through all list orders遍历所有列表订单
【发布时间】:2020-06-04 11:30:25
【问题描述】:

所以我有一组 11 个变量,我想使用 python 分配数字 1 到 11。然后我想遍历这些作业的所有组合并检查它们是否完成了一系列测试。 6 个测试是这样的,即测试 6 个不同的变量组合(包括一个单独的保持恒定值 (12) 的第 12 个变量)以查看它们是否相加到 26。要使排列成功,所有组合必须相加到 26 .

为了简化,假设只是 3 个变量分配了数字 1-3 我希望程序输出 a=1,b=2,c=3 然后在将顺序更改为 a=1 之前对照标准检查,b=3,c=2。检查然后更改:a=2,b=1,c=3 检查并更改等,直到检查完所有组合。

我首先考虑使用列表来存储数字 1 到 11,然后使用 shuffle 函数随机化列表顺序。我不确定如何迭代这些组合。 shuffle 的随机性最终会完成这项工作,但它会非常慢,而且肯定不是一个优雅的解决方案。

提前感谢您的帮助:)

【问题讨论】:

  • itertools.combinations() 是一个内置的解决方案。
  • 什么是 6 项测试?您是否将搜索限制在 11 个变量中的 4 个?这些是否重复?
  • 这 6 个测试是对 6 个不同的变量组合(包括保持恒定值 (12) 的单独的第 12 个变量)进行测试,看它们是否相加为 26。成功,所有组合必须加到 26。
  • 修改问题有帮助,所以显示了这个要求。

标签: python list loops combinations permutation


【解决方案1】:

在浏览了答案和链接后,我意识到我在这里真正需要的是itertools.permutation 函数。由于这个特殊问题需要数字列表的所有排列 1-11 而不仅仅是这些数字在较小尺寸列表中的组合并且排序很重要。以下链接对于实现解决方案很有用。 https://www.tutorialspoint.com/generate-all-permutation-of-a-set-in-python

import itertools
    numbers = list(range(1,12))
    permutations=list(itertools.permutations(numbers,11))

此代码的结果提供了数字 1-11 的所有可能顺序作为元组列表,然后我可以对其进行迭代以检查它们是否通过测试。

【讨论】:

    【解决方案2】:

    itertools 包包含一个可能对您有帮助的combinations 函数。例如:

    import itertools
    numbers = range(1, 12)
    for (a,b,c) in itertools.combinations(numbers, 3):
       # do something
    

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 2022-11-18
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2015-12-10
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多