亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

迭代時修改列表

迭代時修改列表

冉冉說 2019-06-10 20:29:03
迭代時修改列表l  = range(100)                         for i in l:                              print i,                              print l.pop(0),                       print l.pop(0)上面的python代碼給出了與預期完全不同的輸出。我想循環一下項目,這樣我可以在循環時跳過一項。請解釋一下。
查看完整描述

3 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

我以前曾被(別人的)“聰明”代碼咬過,這些代碼試圖在迭代列表時修改列表。我決心在任何情況下都不做這件事。

您可以使用片運算符。mylist[::3]跳到列表中的第三項。

mylist = [i for i in range(100)]for i in mylist[::3]:
  print(i),

有關我的示例的其他要點與Python3.0.

  • 我使用列表理解來定義mylist,因為它在Python3.0中工作(見下文)
  • print是python3.0中的一個函數。

Python3.0range()現在的行為類似于xrange()以前的行為,除非它適用于任意大小的值。后者已不復存在。


查看完整回答
反對 回復 2019-06-10
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

永遠不要改變正在循環的容器,因為容器上的迭代器不會被告知您的更改,而且,正如您已經注意到的,這很可能產生一個非常不同的循環和/或一個不正確的循環。在正常情況下,在容器的副本上循環是有幫助的,但是在您的例子中,很明顯想要這樣做,因為容器在循環的50條腿之后將是空的,如果您再次嘗試彈出,您將得到一個異常。

有什么不清楚的是,你想要實現什么行為,如果有的話?!也許你可以用while...?

i = 0while i < len(some_list):
    print i,                         
    print some_list.pop(0),                  
    print some_list.pop(0)


查看完整回答
反對 回復 2019-06-10
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

一般的經驗法則是,在迭代集合/數組/列表時不要修改它。

使用輔助列表存儲要對其進行操作的項,并在初始循環之后在循環中執行該邏輯。


查看完整回答
反對 回復 2019-06-10
  • 3 回答
  • 0 關注
  • 569 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號