[英]Is “for x in range(3): print x” guaranteed to print “0, 1, 2” in that order?
是形式的循环
for x in range(3):
print x
保证输出
0
1
2
以该顺序? 换句话说,如果你for item in mylist
语句中循环一个带有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
是的,它确实。 它不是for循环保证任何东西,而是范围函数。 range(3)
为您提供一个返回0,然后是1然后返回2的迭代器。迭代器一次只能访问一个元素,因此这是for循环可以访问元素的唯一顺序。
其他迭代器(例如,不由range
函数生成的迭代器)可以返回其他顺序中的元素。
是保证从mylist [0]开始并按顺序进行的循环(mylist [1],mylist [2],...)?
使用for循环时,列表将用作迭代器。 也就是说,for循环实际上没有索引到它。 它只是不断调用next
函数,直到没有更多的元素。 通过这种方式,for循环本身没有说明元素的处理顺序。
是。 Python中的for
循环按顺序遍历list
或iter
。 range
返回Python 2.x中的列表和Python 3.x中的迭代器,因此你的for x in range(3)
循环确实总是被排序。
但是 , dict
s或set
s也不能这样说。 它们不会按顺序遍历 - 这是因为它们的键的顺序是不确定的。
是的,它从列表的第一个元素开始,然后转到最后一个元素。
并非python中的所有数据类型都可以,例如dicts,但列表肯定会这样做。 range(x)
肯定会。
是。
但是有了字典,没有保证订单。
是。 关于For Loop的 Python文档说:
基本上,任何具有可迭代方法的对象都可以在Python中的for循环中使用...具有可迭代方法基本上意味着数据可以以列表形式呈现,其中有序的多个值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.