ホームページ  >  記事  >  バックエンド開発  >  Python3 で for ループを使用してリスト内の要素を削除する際の落とし穴

Python3 で for ループを使用してリスト内の要素を削除する際の落とし穴

不言
不言オリジナル
2018-04-19 11:28:452272ブラウズ

次の記事では、Python3 で for ループを使用してリスト内の要素を削除する場合の落とし穴について詳しく説明します。これは非常に参考になるので、皆さんのお役に立てれば幸いです。一緒に見てみましょう

for ループステートメントのオブジェクトは反復可能オブジェクトです。反復可能オブジェクトは __iter__ または iter メソッドを実装し、反復子を返す必要があります。イテレータは __next__ または next メソッドを実装するだけで済みます。

次に、リストが反復をサポートする理由を確認してみましょう:


x = [1,2,3]
its = iter(x)
# its = x.__iter__()
print(type(its))
# print(its.__next__())
# print(its.__next__())
# print(its.__next__())
print(next(its))
print(next(its))
print(next(its))


結果: for ステートメントはどのようにループしますか?手順は次のとおりです:


(1) まず、オブジェクトが反復可能オブジェクトであるかどうかを判断します。そうでない場合は、エラーを直接報告し、そうである場合は、__iter__ または iter メソッドを呼び出して反復子

( 2) 続行 イテレータの __next__ または next メソッドを呼び出し、毎回順番にイテ​​レータ内の値を返す

(3) 最後まで繰り返し、要素がなくなったら StopIteration 例外をスローし、Pythonこの例外は単独で処理され、開発者には公開されません

<class &#39;list_iterator&#39;>
1
2
3

Result:


list1 = [1,2,3,4,5,6]
for i in list1:
 if i == 2:
  list1.remove(i)
 print(i)
print(list1)

2番目の出力の結果は、明らかに要素2が含まれるリストです。が削除されましたが、最初の print に 3 がないのは、for ステートメントを実行するときに、最初にイテレータが生成され、次に next メソッドが使用されてイテレータ内の値が順番に返されるためです。リストから削除されると、要素 3 のインデックスが元の要素になります。インデックス 2 は、要素 3 を要素 2 の位置に押し出すため、次のメソッドは値 3 を返しません。Python では、iter 関数を使用できます。順序付けされた集約型のイテレータを取得するには、イテレータを次のポインタを持つ一方向のリンクリストがあるイテレータとして理解しています。ヘッダーの内容は空です。次のポインタは、順序付けされた集計タイプの最初の要素を指します。 リンクされたリストの最後の要素の次のポインターにアクセスすると、Python は StopIteration エラーを報告します。

関連する推奨事項:


Python リストから要素を削除するときに注意すべき落とし穴


以上がPython3 で for ループを使用してリスト内の要素を削除する際の落とし穴の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。