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

不言
リリース: 2018-04-19 11:28:45
オリジナル
2197 人が閲覧しました

次の記事では、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!