python - 在循环的条件语句中调用 len() 可以吗?

标签 python arrays list

在 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/

相关文章:

python - 在 Python 中搜索值时出错

python - 在 Python 类中清理临时文件夹的正确方法

python - 在 Django 中验证模型时出现未处理的异常

javascript - mongodb/mongoose - 按两个字段排序

java - 查找数组中的数字

c# - List<List> 困惑

python - 使用 xlsxwriter python 进行字符串验证

python - Django:如何在对象创建期间更新另一个模型的字段

arrays - Matlab将txt文件读入数组

python - 创建一个以列表中元素的长度为键的字典