web-dev-qa-db-ja.com

.join()メソッドは正確には何をしますか?

私はPythonにはかなり慣れていませんし、私が読んだ.join()が文字列を連結するための好ましい方法であることを完全に混同しています。

私は試した:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)

そして、のようなものを得ました:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

どうしてこんな風に動くの? 595を自動的に追加するだけではいけませんか?

196
Matt McCormick

出力をよく見てください。

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

元の文字列の「5」、「9」、「5」を強調表示しました。 Python join() メソッドは文字列メソッドで、文字列と結合するためにリストを取ります。 。より簡単な例を説明するのに役立ちます。

>>> ",".join(["a", "b", "c"])
'a,b,c'

"、"は与えられたリストの各要素の間に挿入されます。あなたの場合、あなたの "リスト"はリスト["5"、 "9"、 "5"]として扱われる文字列表現 "595"です。

代わりに+を探しているようです。

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
290
Greg Hewgill

joinは引数として繰り返し可能なものを取ります。通常はリストです。あなたの場合の問題は、文字列はそれ自体が反復可能で、順番に各文字を出力するということです。あなたのコードはこれに分類されます:

"wlfgALGbXOahekxSs".join("595")

これはこれと同じように機能します。

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

そしてあなたの文字列を生成します。

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

イテラブルとしての文字列は、Pythonで最も紛らわしい最初の問題の1つです。

88
Ned Batchelder

文字列を追加するには、それを+記号で連結するだけです。

例えば。

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

joinは、文字列を区切り文字でつなぎます。区切り文字はjoinの直前に配置します。例えば。

>>> "-".join([a,b])
'Hello, -world'

Joinは文字列のリストをパラメータとして取ります。

57
Dan Loewenherz

join()は全てのリスト要素を連結するためのものです。 2つの文字列 "+"だけを連結する場合は、もっと意味があります。

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid
7
Pēteris Caune

他の人が言っていることをもう少し詳しく説明すると、joinを使って2つの文字列を単純に連結したい場合は、次のようにします。

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])
4
Jorenko

大量の文字列を連結するために+を使用するのにコストがかかる理由 についての説明がここにあります

プラス演算子は、2つのPython文字列を連結するための完璧な解決策です。しかし、2つ以上の文字列を追加し続ける場合(n> 25)、他のことを考えたいと思うかもしれません。

''.join([a, b, c])トリックはパフォーマンスの最適化です。

2
ZakS

"" joinを使ってリスト中の文字列を変数にコピーすることができます。

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
0
Martin
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

これが入力の場合は、JOINメソッドを使用して、単語間の距離を追加したり、リストを文字列に変換したりできます。

これはPythonの出力です

'my name is kourosh'
0
kourosh

これを入力として提供すると、

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

Pythonはこれを出力として返します。

'server=mpilgrim;uid=sa;database=master;pwd=secret'
0
Akash Kandpal