在 C 中,像这样调用 strlen 被认为是不好的做法:
for ( i = 0; strlen ( str ) != foo; i++ )
{
// stuff
}
当然,原因是它效率低下,因为它多次“计算”字符串中的字符。
然而,在 Python 中,我经常看到这样的代码:
for i in range ( 0, len ( list ) ):
# stuff
这是不好的做法吗?我应该将 len() 的结果存储在一个变量中并使用它吗?
最佳答案
在 Python 中,一个 for
循环遍历一个类似列表的对象,它没有每次都检查的条件语句。为了说明,以下两个循环在功能上是等价的; while
loop是for (i=0; i< n; i++) { ... }
的直译, 而 for
循环是这样做的 Pythonic 方式:
i = 0
while i < n:
# do some actions using i
i += 1
for i in range(n):
# do some actions using i
在for
循环,range(n)
在循环开始之前计算,然后然后在循环中使用它的返回值。换句话说,range(n)
被评估一次(且仅一次)以获取 i
的值列表*应该采取。
所以在给定的具体例子中,Python看到了for i in range(0, len(list))
, 评估 range(0, len(list))
(因此 len
被调用一次)并存储输出(它不会再次调用 range
(或 len
))。
(* 在 Python 3.x 中 range
实际上不返回列表,但在 for 循环中使用它时,功能上没有区别)
关于python - 在循环的条件语句中调用 len() 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9953152/