文字列とバイトのようなオブジェクトを連結するときに `.join()` が予期しない結果を生成するのはなぜですか?

Linda Hamilton
リリース: 2024-11-12 13:26:02
オリジナル
374 人が閲覧しました

Why Does `.join()` Produce Unexpected Results When Concatenating a String and a Bytes-like Object?

.join() とは何ですか?また、文字列の連結でどのように機能しますか?

Python の .join() メソッドは文字列に対してよく使用されます連結。ただし、提供された例をテストすると、予期しない結果が得られました。このメソッドの目的と使用法を理解すると、なぜそのように動作するのかが明確になります。

.join() メソッドは文字列を操作し、要素の反復可能値を引数として受け取ります。連結中に反復可能オブジェクトの各要素の間に指定された文字列を挿入します。

例:

",".join(["a", "b", "c"])
# Output: 'a,b,c'
ログイン後にコピー

提供された例:

array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
ログイン後にコピー

tostring()メソッドは、文字の配列をバイトのようなオブジェクトに変換します。このバイトのようなオブジェクトは、文字列「595」とともに .join() の入力として使用されます。

ただし、理解しておくべき重要な点は、文字列「595」は次のリストとして扱われるということです。個々の文字、つまり ["5"、"9"、"5"]。したがって、「.join()」はこのリストを操作し、各文字の間にバイトのようなオブジェクトを挿入します。

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^
ログイン後にコピー

出力内の各「5」、「9」、「5」は挿入を示します。

意図した連結を実現するには、代わりに演算子を使用できます。

array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
ログイン後にコピー

このアプローチでは、バイトのようなオブジェクトを直接連結します。オブジェクトに文字列「595」を追加すると、文字間に挿入を行わずに目的の出力が生成されます。

以上が文字列とバイトのようなオブジェクトを連結するときに `.join()` が予期しない結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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