【问题标题】:Easier formatting for variable ranges in list comprehensions列表推导中的变量范围更容易格式化
【发布时间】:2013-01-30 18:59:19
【问题描述】:

如果我的列表理解本质上是这样的:

result = [function(i,j,k,l) for i in range(3) for j in range(3)
    for k in range(3) for l in range(3)]

它做我想要的,但它看起来很丑。我对 Python 还很陌生,但似乎 Python 会有某种内置功能,可以让我以一种不那么繁琐的方式总结 4 个字母 ijkl 的所有可能组合。我的直觉是正确的,还是我一直盯着那条又长又丑的线?

【问题讨论】:

  • 查看 itertools 模块。
  • 您想要循环的是笛卡尔积,您可以使用itertools.product(例如,在您的情况下,result = [function(*args) for args in itertools.product(range(3), repeat=4)]。这是很多问题的重复,但我承认有时很难找到要搜索的正确短语。
  • @DSM 为什么不将此作为答案发布?
  • @LevLevitsky:因为我希望有人会选择一个好的 dup..
  • 作为记录,我个人认为您当前的代码非常清晰和中肯,如果稍微冗长的话。

标签: python python-3.x list-comprehension


【解决方案1】:

因为没有人为此提出重复,所以这是我的答案,仅供记录(尽管 DSM 已经在 cmets 中给出了一个很好的答案,他还使用了itertools.product,这就是解决方案的核心):

result = itertools.starmap(function, itertools.product(range(3), repeat=4))

starmap 返回一个迭代器(就像 Python 3 的 map),因此您可能希望将此表达式包装在一个列表中,此时 DSM 的答案可能更具可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多