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