"for x in range(3):print x"是否保证按顺序打印"0,1,2"?

Mar*_*.H. 3 python

是形式的循环

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],...)?

Tim*_*Tim 6

是的,内置的listrange将永远在你期望的顺序进行迭代.类定义自己的迭代序列,因此迭代顺序将在不同的类之间变化.由于它们的性质setdict(以及其他)不会以可预测的顺序迭代.

您可以为类定义所需的任何迭代序列.例如,您可以使其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)


And*_*iid 5

是的,它确实.它不是for循环保证任何东西,而是范围函数.range(3)给你一个迭代器,返回0,然后是1,然后是2.迭代器一次只能访问一个元素,这是for循环可以访问元素的唯一顺序.

其他迭代器(例如,不由range函数生成的迭代器)可以返回其他顺序中的元素.

是保证从mylist [0]开始并按顺序进行的循环(mylist [1],mylist [2],...)?

使用for循环时,列表​​将用作迭代器.也就是说,for循环实际上没有索引到它.它只是不断调用next函数,直到没有更多的元素.通过这种方式,for循环本身没有说明元素的处理顺序.

  • "range(3)给你一个迭代器" - 请注意提问者正在使用Python 2,所以`range`返回一个`list`. (2认同)