【问题标题】:Python itertools: Best way to unpack product of product of list of listsPython itertools:解压缩列表产品产品的最佳方法
【发布时间】:2016-06-08 19:27:52
【问题描述】:

我有一个列表列表,我需要对其进行 3 次迭代(3 个嵌套循环)

rangeList = [[-0.18,0.18],[0.14,0.52],[0.48,0.85]]

我可以使用以下产品的产品来实现这一点

from itertools import product
for val in product(product(rangeList,rangeList),rangeList):
    print val

输出如下所示

(([-0.18, 0.18], [-0.18, 0.18]), [-0.18, 0.18])
(([-0.18, 0.18], [-0.18, 0.18]), [0.14, 0.52])
(([-0.18, 0.18], [-0.18, 0.18]), [0.48, 0.85])
(([-0.18, 0.18], [0.14, 0.52]), [-0.18, 0.18])

它是一个元组的元组。我的问题是

  1. 这是一个好方法吗?
  2. 如果是这样,打开包装的最佳方法是什么 将产品val 输出为 3 个单独的变量,例如 xRangeyRangezRange,其中每个都包含一个列表值,例如 [-0.18, 0.18][0.14, 0.52] 等。

【问题讨论】:

  • 查看repeat 参数到itertools.product。你想要product(rangeList, repeat=3)。虽然product(rangeList, rangeList, rangeList) 也可以。
  • val 不是迭代器,但product 的结果是。顺便问一下,您希望您的xRangeyRangezRange 是什么样的?它们应该包含哪些值?
  • 您可能希望product(*rangeList) 获得所需的结果,但除非您显示xRange / yRange / zRange 的所需输出/值,否则我不知道
  • @MarkDickinson repeat 选项效果很好。谢谢。
  • 你能解释一下你想要的结果吗?我不清楚你想做什么。

标签: python itertools flatten iterable-unpacking


【解决方案1】:

这可能是做你想做的最优雅的方式:

for xrange, yrange, zrange in product(rangeList, repeat=3):
    print xrange, yrange, zrange

但只是为了演示如何进行您尝试的“深度”元组解包:

for (xrange, yrange), zrange in product(product(rangeList,rangeList),rangeList):
    print xrange, yrange, zrange

【讨论】:

  • 与重复选项完美配合。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多