ホームページ > バックエンド開発 > Python チュートリアル > Python での反復中にリスト内の文字列を安全に変更するにはどうすればよいですか?

Python での反復中にリスト内の文字列を安全に変更するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-20 14:46:23
オリジナル
188 人が閲覧しました

How Can I Safely Modify Strings Within a List During Iteration in Python?

リストの安全な反復と変更

問題:

Python の for ループ中にリストを変更することは、一般的に推奨されません。ただし、リスト内の文字列を変更する必要がある場合はどうすればよいでしょうか?これらの変更可能な値の置換は、禁止された変更としてカウントされますか?

回答:

既に反復処理されたリスト内の要素を変更する限り、それは禁止された変更とみなされます。許容できる。例:

a = ['a',' b', 'c ', ' d ']

for i, s in enumerate(a):
    a[i] = s.strip()

print(a) # -> ['a', 'b', 'c', 'd']
ログイン後にコピー

このコードはリスト a を反復処理し、各文字列から空白を削除します。新しいリストを作成して元のリストに割り当てることはありません。

ただし、反復中にリスト内の項目数を変更するのは危険です。例:

b = ['a', ' b', 'c ', ' d ']

for i, s in enumerate(b):
    if s.strip() != b[i]: # leading or trailing whitespace?
        del b[i]

print(b) # -> ['a', 'c '] # WRONG!
ログイン後にコピー

このコードは、先頭または末尾に空白がある要素をリスト b から削除しようとします。残念ながら、要素を削除すると後続の反復のインデックス作成が中断されるため、この処理は失敗します。

注意:

説明したようにリスト内の要素を安全に変更できることに注意することが重要です。要素の数を増減しようとすると、エラーが発生する可能性があります。

インプレース削除:

反復中にエントリを効果的に削除したい場合は、リスト内包表記を使用します:

b = ['a',' b', 'c ', ' d ']

b[:] = [entry for entry in b if entry.strip() == entry]

print(b) # -> ['a'] # CORRECT
ログイン後にコピー

このコード先頭または末尾に空白がないエントリのみを含む新しいリストを作成し、不要な要素を効果的に削除します「その場で」

以上がPython での反復中にリスト内の文字列を安全に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート