1樓:
看來兄弟是混淆了while和for ,for在python中的定義是遍歷列表的
也就是第一次他是以索引1在操作,第二次它就會以索引2在操作,即使你pop了索引0列表改變了,它依舊會以第二個在操作,你把你的**加一段就可以知道了
l=[1,2,3,4,5,6,7]
l1=l[:]
for i in l1:
print'i=',i
print "is i == l1(0)?" ,(i is l1[0])
print "\t\tvalue of l1.pop(0):%d" % l1.pop(0)
print '\t\tnew list of l1:',l1
print "\t\t\t\tlenth:%d" %len(l1)
你看的到結果中print的i值是以1,3,5,7跳躍的。因為第二次的迴圈中for給予i的索引是了l1[1]
但是你已經pop掉了0了。這是錯誤的原因。
樓下的兄弟給了正解,你他以不變列l的長度建立新列來進行遍歷,但是有個bug,當你的
l=[1,2,3,4,5,6,7]時候range(0,len(l))是和l列一樣,但是當l=[2,3,4,5,6,7,8]的適合這個方法就不對了
直接改成
l=[1,2,3,4,5,6,7]
l1=l[:]
for i in l:
print i
print "is l[i-1] == l1(0)?" ,(l[i-1] is l1[0])
print "\t\tvalue of l1.pop(0):%d" % l1.pop(0)
print '\t\tnew list of l1:',l1
print "\t\t\t\tlenth:%d" %len(l1)
這樣就完美了
2樓:少廢話合不合格
l=[1,2,3,4,5,6,7]
l1=l[:]
for i in l1: # 改成 for i in range(0,len(l)):
print "is i == l1(0)?" ,(i is l1[0]) #改成print "is l[i] == l1(0)?" ,(l[i] is l1[0])
print "\t\tvalue of l1.pop(0):%d" % l1.pop(0)
print '\t\tnew list of l1:',l1
print "\t\t\t\tlenth:%d" %len(l1)
原因是呼叫pop(0)以後,i 移動了2次,就是說,第一次i=1,第2次i=3,第三次i=5, 第四次i=7,然後就出現了你上面的結果。具體為什麼移動了2次,我也不清楚。
剛意識到的:pop(0)以後,l1列表更新了,不是i移動了2次。相同的索引號在不同的列表中得到的值是不一樣的,所以第一次i=1,第2次i=3,第三次i=5, 第四次i=7
3樓:
l=[1,2,3,4,5,6,7]
l1=l[:]
for i in range( len( l1 ) ):
print "is i == l1(0)?" ,( not i )print "\t\tvalue of l1.pop(0):%d" % l1.pop(0)
print '\t\tnew list of l1:',l1print "\t\t\t\tlenth:%d" %len(l1)
python中for迴圈的疑惑?
4樓:匿名使用者
這個沒有問題呀
a 列表有兩個元素[1,3,5] 和 3 用for遍歷a 所以得到這兩個值呀
你要想把裡面的列表也列舉出來,就還要再加一層for
python for迴圈的問題,python中兩個for迴圈的問題
else沒執行到是因為for b in list1使得b不再是150,而是list1中的每個值,自然不會執行else了。你的python程式我幫你改完了,你看看吧.改動的地方見註釋 continue的作用就是使迴圈中滿足條件的 跳過,繼續執行下一輪 你的 continue應該是屬於else,所以el...
用python的哪個版本比較好,新手學Python用哪個版本好
新手開始總糾結學 python2 還是 python3,這種糾結完全就是給自己徒增煩惱,因為它們是同一種語言,只有少部分地方語法不相容,儘管目前大部分公司還在用python2,但是python3逐漸成為主流已是不爭事實,畢竟後者效能方面更佔有優勢。2.7 或者 3.5 據說 明年 可能都轉 3.5 ...
自學python的學習路線是什麼?一些python學習資
我要程式設計 零元教你學習 python培訓學習路線都是基於培訓內容制定的,優就業的python課程針對零基礎學生開設,所以學習路線設定也是由淺入深,循序漸進。首先學習python語言基礎 linux mysql,這部分內容是初級python工程師需要掌握的 其次學習python web程式設計基礎...