Dor*_*ord 6 python arrays list
在C中,像这样调用strlen被认为是不好的做法:
for ( i = 0; strlen ( str ) != foo; i++ )
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)
当然,原因在于它效率低,因为它会多次"计算"字符串中的字符.
但是,在Python中,我经常看到这样的代码:
for i in range ( 0, len ( list ) ):
# stuff
Run Code Online (Sandbox Code Playgroud)
这是不好的做法吗?我应该将len()的结果存储在变量中并使用它吗?
huo*_*uon 11
在Python中,for循环遍历类似列表的对象,它没有每次都检查的条件语句.为了说明,以下两个循环在功能上是等效的; 该while环路的直接翻译for (i=0; i< n; i++) { ... },而for循环是这样做的Python的方式:
i = 0
while i < n:
# do some actions using i
i += 1
for i in range(n):
# do some actions using i
Run Code Online (Sandbox Code Playgroud)
在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循环中使用它时,功能上没有区别)
for i in range(len(whatever))Python的写作风格很差。正如其他人提到的,可以通过直接迭代for element in whatever。但是,人们仍然继续这样做有两个原因:
他们是C程序员,还没有直接开发迭代。
他们想在遍历列表时修改列表,否则需要索引。如果是这样的情况下,Python的方式做到这一点是enumerate功能:for i, element in enumerate(whatever)。