[英]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.