2017-09-23 16 views
0

リストビルトイン関数popに関して本当に簡単な問題について混乱しています。Pythonで組み込み関数popを使用するには?

コードはできるだけ単純です。

L=[1,2] 
for i in L: 
    print i 
    L.pop(0) 

、それは私が長いリスト

L=[1,2,3,4,5,6] 
for i in L: 
    print i 
    L.pop(0) 

でそれを試してみましたが、それが戻って最初のコードに、だから、私に

1 
3 
5 

を与えた

1 

を与え、私が思っていたのは、「私はLのために」という行からだったforループは最初に '1'のために実行されるので、iを出力し、L.pop(0)はLから '1'を削除します。 '2 in L'のループが2回、 Lの空リストを作る。しかし、それは1を返しただけで、2番目のケースの場合は1,3,5でした。 私はここで何が欠けていますか?

答えて

3

私はここで何が欠けていますか?

forループの基本的な概念がありません。

pop(0)を使用してリストの先頭からポップしています。したがって、ポップした後は、すべての要素が1つ左の位置に移動し、残りの要素すべてのインデックスが変更されます。この場合、forループのnext()メソッドyieldは、現在保持しているインデックスのために新たにシフトされた要素です。したがって、あなたはそのような行動を見ます。

printステートメントを追加してコードを変更すると、より明確になります。この例では

L=[1,2,3,4,5,6] 
for i in L: 
    print L, i 
    L.pop(0) 

# Output 
[1, 2, 3, 4, 5, 6] 1 # It has index 0 here 
[2, 3, 4, 5, 6] 3 # It has index 1 here 
[3, 4, 5, 6] 5 # It has index 2 here 
# 6 is not printed here as it has index 3 to print here but our L is reduced to [4, 5, 6] which does not contain any index 3 
0
L=[1,2] 
for i in L: 
    print i 
    L.pop(0) 

foreachループは一度だけ実行されるため、あなたは1として出力を取得します。 i = 0の最初の反復では、L [i]は1に等しく、それを印刷します。あなたは、リストのリスト長から1つの項目をポップダウンすると、自動的に最初の反復を、このコードではL.pop(0)声明

L=[1,2,3,4,5,6] 
for i in L: 
    print i 
    L.pop(0) 

後に壊れて頂きます1.だから、foreachのループをすることである。ここで、i = 0。それは1を印刷します。次にポップアップするとリストのリストの長さの最初の要素が5になります。リストは[2,3,4,5,6]として自動調整されます。 iが1に等しいときの次の反復を考慮することによって、L [1] = 3の場合は3が出力されます。その後、リストの最初の要素がポップされ、L = [3,4,5,6]になります。最後に5をL [2]として印刷します。

関連する問題