簡體   English   中英

“for x in range(3):print x”是否保證按順序打印“0,1,2”?

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

是的,內置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

是的,它確實。 它不是for循環保證任何東西,而是范圍函數。 range(3)為您提供一個返回0,然后是1然后返回2的迭代器。迭代器一次只能訪問一個元素,因此這是for循環可以訪問元素的唯一順序。

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

是保證從mylist [0]開始並按順序進行的循環(mylist [1],mylist [2],...)?

使用for循環時,列表​​將用作迭代器。 也就是說,for循環實際上沒有索引到它。 它只是不斷調用next函數,直到沒有更多的元素。 通過這種方式,for循環本身沒有說明元素的處理順序。

是的。

像這樣循環的python:

for e in list:
    print e

可以被翻譯為:

iterator = list.__iter__()
while True:
    try:
        e = iterator.next()
    except StopIteration:
        break
    print e

因此,當對象迭代器的“下一個”方法以“正確”順序返回值時,您將以“正確”順序獲取元素。 對於python列表,這保證會發生。

有關更多信息,請查看此處此處

是。 Python中的for循環按順序遍歷listiter 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM