【问题标题】:Condensing for loop expressions (Python)压缩 for 循环表达式 (Python)
【发布时间】:2020-11-22 22:09:46
【问题描述】:

有没有办法将这对循环压缩成两行或一行?:

for x in y:
         z = 1
        while x > z: z += 1

看起来更像(注意以下不起作用):

for x in y: z = 1
    while x > z: z += 1

请注意:重点不是解决实际的循环,只是 for 循环必须在 while 循环之前包含某种类型的计数器变量。

这个问题纯粹是关于语法的,所以解析 z 的值不是这里的查询。代码可能是这样的:

for x in y:
      z = 1 
      q = 0
      while z < x:
            q += 1

或 for 和 while 循环的任何其他组合,其中在 forwhile 之间定义了至少一个变量,但我希望压缩循环,而不是完全删除循环的使用。

【问题讨论】:

  • 使用理解通常是压缩这样的循环的方法,但你需要提供一个更真实的例子(你实际上是在构建一个列表)来获得一个如何将其翻译成理解的好例子。这个答案就是z = y[-1]。 :P
  • @Samwise 我编辑了主帖以更好地反映问题;目标不是解析 z 的值,这只是语法的一个示例。它适用于任何一对forwhile 循环,其中在for 范围内和while 之前声明了至少一个变量。
  • 为什么会有一个标量变量循环不断地被重新初始化?为什么不只做循环的最后一次迭代?再说一遍:通常这样一个循环的目的是建立一个列表,在这种情况下你会做一个理解,但不可能用你提供的例子来证明这一点。
  • 代码的功能无关,这纯粹是语法问题。请忽略代码的实际结果;问题只是是否有一种方法可以编写相同的代码,具有相同的值和相同的两个循环,只是在更少的行上。无需实际更改代码。例如,我可以将while z &lt; x: q += 1 全部放在一行上。 q+= 1 不需要低于 while 循环,但按照惯例它是。所以问题是,是否有一种方法可以在不更改实际组件的情况下将这个小 sn-p 代码压缩得更小。

标签: python loops syntax obfuscation


【解决方案1】:

或者这个?

for x, z in [(x, 1) for x in y]:
    while x > z:
        z += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多