1. ホーム
  2. python

[解決済み] popメソッド(またはdel文)を持つforループがすべてのリスト要素に対して反復処理を行わない理由

2022-02-14 04:53:52

質問

私はPythonの初心者で、リストについて実験しています。 Python 3.2.3 (default, Oct 19 2012, 20:13:42), [GCC 4.6.3] on linux2 を使用しています。

以下は私のサンプルコードです。

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

次のような出力が期待できます。

1
[2, 3, 4, 5, 6]
2
[3, 4, 5, 6]
3
[4, 5, 6]
4
[5, 6]
5
[6]
6
[]

代わりに、次のようなものが表示されます。

1
[2, 3, 4, 5, 6]
2
[3, 4, 5, 6]
3
[4, 5, 6]

for-loopは3ターン後に反復を停止します。なぜなのか、誰か説明してください。

解決方法は?

少し展開する(キャレット( ^ ) はループの "インデックス" にあります)。

your_list = [1,2,3,4,5,6]
             ^

を弾き飛ばした後

your_list = [2,3,4,5,6]
             ^

では、ループを継続します。

your_list = [2,3,4,5,6]
               ^

では、最初の項目をポップアップで表示します。

your_list = [3,4,5,6]
               ^

では、ループを続けます。

your_list = [3,4,5,6]
                 ^

さて、最初の項目をポップオフします。

your_list = [4,5,6]
                 ^

さて、ループを続けよう -- 待って、もう終わったよ :-)


>>> l = [1,2,3,4,5,6]
>>> for x in l:
...     l.pop(0)
... 
1
2
3
>>> print l
[4, 5, 6]