是形式的循环
for x in range(3):
print x
Run Code Online (Sandbox Code Playgroud)
保证输出
0
1
2
Run Code Online (Sandbox Code Playgroud)
以该顺序?换句话说,如果你遍历一个列表for item in mylist语句中,循环保证开始的mylist[0],并依次进行(mylist[1],mylist[2],...)?
是的,内置的list和range将永远在你期望的顺序进行迭代.类定义自己的迭代序列,因此迭代顺序将在不同的类之间变化.由于它们的性质set和dict(以及其他)不会以可预测的顺序迭代.
您可以为类定义所需的任何迭代序列.例如,您可以使其list反向迭代.
class reversedlist(list):
def __iter__(self):
self.current = len(self)
return self
def next(self):
if self.current <= 0:
raise StopIteration
self.current -= 1
return self[self.current]
x = reversedlist([0, 1, 2, 3, 4, 5])
for i in x:
print i,
# Outputs 5 4 3 2 1 0
Run Code Online (Sandbox Code Playgroud)
是的,它确实.它不是for循环保证任何东西,而是范围函数.range(3)给你一个迭代器,返回0,然后是1,然后是2.迭代器一次只能访问一个元素,这是for循环可以访问元素的唯一顺序.
其他迭代器(例如,不由range函数生成的迭代器)可以返回其他顺序中的元素.
是保证从mylist [0]开始并按顺序进行的循环(mylist [1],mylist [2],...)?
使用for循环时,列表将用作迭代器.也就是说,for循环实际上没有索引到它.它只是不断调用next函数,直到没有更多的元素.通过这种方式,for循环本身没有说明元素的处理顺序.