Python 相当于 Java 的标准 for 循环是啥?
Posted
技术标签:
【中文标题】Python 相当于 Java 的标准 for 循环是啥?【英文标题】:What is Python's equivalent of Java's standard for-loop?Python 相当于 Java 的标准 for 循环是什么? 【发布时间】:2013-06-29 04:58:38 【问题描述】:我正在编写一个简单的算法来检查整数的素数,但我在将这段 Java 代码翻译成 Python 时遇到了问题:
for (int i = 3; i < Math.sqrt(n); i += 2)
if (n % i == 0)
return false;
所以,我一直在尝试使用它,但显然我跳过了除以 3:
i = 3
while (i < int(math.sqrt(n))):
i += 2 # where do I put this?
if (n % i == 0):
return False
【问题讨论】:
for (a; b; c) _
-> a; while(b) _; c;
- 除非范围界定问题并且必须处理 continue
。 for-each 构造的最后一个组件在循环体的每次评估之后进行评估。
您可能想看看blog.startifact.com/posts/older/what-is-pythonic.html 以将java(或其他语言)翻译成python - 不要忘记成为pythonic!
【参考方案1】:
Python 中唯一的 for
-loop 在技术上是“for-each”,因此您可以使用类似
for i in xrange(3, int(math.sqrt(n)), 2): # use 'range' in Python 3
if n % i == 0:
return False
当然,Python 可以做得更好:
all(n % i for i in xrange(3, int(math.sqrt(n)), 2))
也将是等效的(假设在该 Java 循环的末尾有一个 return true
)。事实上,后者将被视为接近它的 Pythonic 方式。
参考:
for
Statements
xrange
all
【讨论】:
Python 有 while 循环......或者我误解了你的部分答案? @mipadi 我认为他的意思是 Python 没有类似 C 的for
循环来合并初始化程序、停止条件和步骤语句。即:Python 中唯一的for
是foreach
。
确实,我澄清了那个说法。【参考方案2】:
直接翻译是:
for i in range(3, int(math.sqrt(n)), 2):
if n % i == 0:
return False
【讨论】:
【参考方案3】:在 Java for 循环中,步骤(您的示例中的 i += 2
部分)发生在循环结束时,就在它重复之前。转换为一段时间,您的 for 循环将相当于:
int i = 3;
while (i < Math.sqrt(n))
if (n % i == 0)
return false;
i += 2;
在 Python 中是类似的:
i = 3
while i < math.sqrt(n):
if n % i == 0:
return False
i += 2
但是,您可以使用 Python 的 xrange
函数使其更“Pythonic”并且更易于阅读,该函数允许您指定 step
参数:
for i in xrange(3, math.sqrt(n), 2):
if n % i == 0:
return False
【讨论】:
【参考方案4】:使用基本的 Python for i in range
循环:
for i in range(3, math.round(math.sqrt(x)), 2):
if (n % i == 0):
return false
【讨论】:
以上是关于Python 相当于 Java 的标准 for 循环是啥?的主要内容,如果未能解决你的问题,请参考以下文章