循环编写技巧
for循环包括多数计数器式的循环。一般而言,for比while容易写,执行时也比较快。
如果你需要在列表中每个一个元素访问或者在过程中修改列表?如果在同一个for循环内,并行遍历一个以上的序列?
你可以使用while循环以及手动索引运算编写这类独特的循环,但是python提供了两个内置函数,在for循环内定制迭代:
(1)内置range函数返回一系列连续增加的整数吗,可作为for中的索引
(2)内置zip函数返回并行元素的元组的列表,可用作for中内遍历数个序列
1) 循环计数器:range
虽然range常用在for循环中产生索引,但也可以在任何需要整数列表的地方。
range会产生从零算起的整数列表,但其中不包括参数的值,如果传入三个参数,第一个将视为下边界,第三个选用的参数可以提供步进值(默认值为1)。range也可以是非正数或非递增的。
>>> list(range(5)),list(range(2,5)),list(range(0, 10, 2))
([0, 1, 2, 3, 4], [2, 3, 4], [0, 2, 4, 6, 8])
>>> list(range(-5, 5))
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> list(range(5, -5, -1))
[5, 4, 3, 2, 1, 0, -1, -2, -3, -4]
2)while , for和range
range常用来间接地迭代一个序列。遍历序列最简单最快的方式是使用简单的for,让python为你处理大多数细节。
如果想明确掌握索引逻辑,可以使用while循环实现。
>>> for i in x: print(i, end = ' ')
...
s p a m >>>
>>> i = 0
>>> while i < len(x):
... print(x[i], end = ' ')
... i += 1
...
s p a m >>>
但是想在for循环中手动索引,则可用range产生用于迭代索引的列表,但这是一个多余的步骤
>>> for i in range(len(x)): print(x[i], end = ' ')
...
s p a m >>>
除非你有特殊需求,不然在可能的情况下,最好使用python中的简单for循环,不要使用while,并且不要在for循环中使用range调用,并将视为最后的手段。
3)range和分片
>>> s = 'abcdefghijkl'
>>> for i in range(0, len(s), 2): print(s[i], end = ' ')
...
a c e g i k >>>
上面代码并不是最理想的实现技术,用分片表达式也可以实现
>>> s = 'abcdefghijkl'
>>> for c in s[::2]: print(c, end = ' ')
...
a c e g i k >>>