Python: for

for-else expression

The for statement is used to iterate over the elements of a sequence (such as a string, tuple or list) or other iterable object:

for_stmt ::= “for” target_list “in” expression_list “:” suite 
             [“else” “:” suite]

is seems to


it = iter(expression_list)

while True:
    try:
        target_list = next(it)
        suite
    except StopIteration:
        break
  • The expression list is evaluated once; it should yield an iterable object. An iterator is created for the result of the expression_list. The suite is then executed once for each item provided by the iterator, in the order returned by the iterator. Each item in turn is assigned to the target list using the standard rules for assignments (see Assignment statements), and then the suite is executed. When the items are exhausted (which is immediately when the sequence is empty or an iterator raises a StopIteration exception), the suite in the else clause, if present, is executed, and the loop terminates.

  • A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there is no next item.

  • for-else example

def find_item(list, n):
        for item in list:
                if n == item:
                        print('I found it!')
                        break
        else:
                print("I can't find it!")

>>> find_item(range(10), 11)
I can't find it!
>>> 
>>> find_item(range(10), 7)
I found it!
  • The for-loop makes assignments to the variables(s) in the target list. This overwrites all previous assignments to those variables including those made in the suite of the for-loop:
>>> for i in range(10):
...     print(i)
...     i = 5   
... 
0
1
2
3
4
5
6
7
8
9
  • There is a subtlety when the sequence is being modified by the loop (this can only occur for mutable sequences, i.e. lists). An internal counter is used to keep track of which item is used next, and this is incremented on each iteration. When this counter has reached the length of the sequence the loop terminates. This means that if the suite deletes the current (or a previous) item from the sequence, the next item will be skipped (since it gets the index of the current item which has already been treated). Likewise, if the suite inserts an item in the sequence before the current item, the current item will be treated again the next time through the loop. This can lead to nasty bugs that can be avoided by making a temporary copy using a slice of the whole sequence, e.g
>>> a
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> for x in a:
...   if x<0: 
...     a.remove(x)
... 
>>> a
[-4, -2, 0, 1, 2, 3, 4]


>>> a
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> for x in a[:]:
...     if x < 0: a.remove(x)
... 
>>> a
[0, 1, 2, 3, 4]

user's for-loop

class MyIter:
    def __iter__(self):
        return self
    def next(self):
        if not condition:
            raise StopIteration
        value = calculate next value
        return value

for item in MyIter():
    do something with item

read more

  • The for statement?

  • Understanding Python's "for" statement?

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贱傀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伊脓,更是在濱河造成了極大的恐慌府寒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件报腔,死亡現(xiàn)場離奇詭異株搔,居然都是意外死亡,警方通過查閱死者的電腦和手機纯蛾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門纤房,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翻诉,你說我怎么就攤上這事炮姨。” “怎么了碰煌?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵舒岸,是天一觀的道長。 經(jīng)常有香客問我芦圾,道長蛾派,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任个少,我火速辦了婚禮洪乍,結果婚禮上,老公的妹妹穿的比我還像新娘夜焦。我一直安慰自己壳澳,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布糊探。 她就那樣靜靜地躺著钾埂,像睡著了一般河闰。 火紅的嫁衣襯著肌膚如雪科平。 梳的紋絲不亂的頭發(fā)上褥紫,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音瞪慧,去河邊找鬼髓考。 笑死,一個胖子當著我的面吹牛弃酌,可吹牛的內(nèi)容都是我干的氨菇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼妓湘,長吁一口氣:“原來是場噩夢啊……” “哼查蓉!你這毒婦竟也來了?” 一聲冷哼從身側響起榜贴,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤豌研,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后唬党,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹃共,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年驶拱,在試婚紗的時候發(fā)現(xiàn)自己被綠了霜浴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓝纲,死狀恐怖阴孟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情税迷,我是刑警寧澤温眉,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站翁狐,受9級特大地震影響类溢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜露懒,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一闯冷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懈词,春花似錦蛇耀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽译暂。三九已至,卻和暖如春撩炊,著一層夾襖步出監(jiān)牢的瞬間外永,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工拧咳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伯顶,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓骆膝,卻偏偏與公主長得像祭衩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阅签,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 太陽越來越烈掐暮,窗外的樹葉都無精打采的耷拉著腦袋,只有知了還在不知疲倦的叫著政钟。 日子就這樣波瀾不驚的過著路克,不知不覺已...
    林風起閱讀 551評論 0 4
  • 一、什么是SQLite SQLite是Android系統(tǒng)中自帶的一個簡易高效的數(shù)據(jù)庫锥涕,語法與MySql類似衷戈,支持事...
    嗟嗟嗟閱讀 315評論 0 0
  • 不知道從什么時候開始,讀書和學習成了一對好基友层坠,似乎不讀書就會變傻殖妇,讀書就是學習的代名詞。我只想小聲的說破花,不至于吧...
    Bookish_陳鍵閱讀 586評論 0 0
  • 蘄艾精油谦趣,是一種由蘄艾中提取出來的精油產(chǎn)品。 外觀為淺黃或綠黃色座每,氣味有些草藥味(蘄艾草的味道)前鹅,水質(zhì)般粘...
    海芹_09d1閱讀 2,647評論 0 0
  • 事事都順利的話舰绘,就沒有意思了,不是嗎葱椭? 成功時捂寿,可以獲得成就感,不順時孵运,可以記住那種挫敗感秦陋。 每個人的工作可能都不...
    萌子莫閱讀 677評論 0 2