回答:
次のjoin
ように、空の文字列のメソッドを使用して、すべての文字列を空の文字列で結合します。
>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'
' '.join(list)
引用符の間にスペースを
"".join(['a','b','c'])
はを意味しJoin all elements of the array, separated by the string ""
ます。同様に、" hi ".join(["jim", "bob", "joe"])
が作成されます"jim hi bob hi joe"
。
これはJavaScriptやRubyなどの多くの一般的な言語で動作しますが、Pythonでは動作しません。
>>> ['a', 'b', 'c'].join('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
奇妙なことに、Pythonではjoin
メソッドはstr
クラスにあります。
# this is the Python way
"".join(['a','b','c','d'])
オブジェクトのjoin
メソッドlist
がJavaScriptや他の一般的なスクリプト言語のようになっていないのはなぜですか?これは、Pythonコミュニティの考え方の一例です。joinは文字列を返すため、リストクラスではなく文字列クラスに配置する必要があるため、str.join(list)
メソッドは、リストをstr
区切り文字として使用して新しい文字列に結合します(この場合str
は空の文字列です)。
どういうわけか私はしばらくしてこの考え方が好きになりました。私はPythonデザインの多くのことについて不満を言うことができますが、その一貫性については不満はありません。
string.join()
を持っているほとんどのコレクションとPythonを比較していましたjoin()
。イテラブルについては、join()
メソッドのコレクションコンストラクターとチェーンにイテラブルを含めるのと同じくらい簡単(かつ読みやすい)なので、そのような言語では問題にならないと思います。
これが最も速い方法かもしれません:
>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'
''.join(['a','b','c'])
map(ord,a)
不要な場所で文字列に変換しますが、結合が必要map(chr,a)
です。ここに私のベンチマークだpastebin.com/1sKFm8ma
''.join()
がはるかに読みやすくなります。
リデュース機能も動作します
import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'
(reduce + '' h)
または(apply + h)
動作します。ただし、Pythonでは、add演算子は2つのオペランドを使用するため、reduceが必要です。それ以外の場合は、拡張呼び出し構文(別名en.wikipedia.org/wiki/Variadic_function)を支持して正式にPythonで非推奨にoperator.add(*h)
なっapply
ているため、実行できます
リストには数字が含まれている場合は、使用することができますmap()
しjoin()
。
例えば:
>>> arr = [3, 30, 34, 5, 9]
>>> ''.join(map(str, arr))
3303459
''.join([str(i) for i in arr])
h = ['a','b','c','d','e','f']
g = ''
for f in h:
g = g + f
>>> g
'abcdef'
''.join(h)
すると、1つずつ追加するメソッドをはるかに上回ります。
ほかにstr.join
最も自然な方法である、可能性が使用することですio.StringIO
し、悪用writelines
一度のすべての要素を書くこと:
import io
a = ['a','b','c','d']
out = io.StringIO()
out.writelines(a)
print(out.getvalue())
プリント:
abcd
このアプローチをジェネレーター関数またはa tuple
またはa ではないイテラブルで使用するとlist
、一時的なリスト作成が保存されます。join
、適切なサイズを一度に割り当てるためされます(1文字の文字列のリストはメモリの点で非常に高価です) )。
メモリが少なく、入力として遅延評価されたオブジェクトがある場合、このアプローチが最適なソリューションです。
次のoperator.concat()
ように使用することもできます。
>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'
Python 3を使用している場合は、先頭に追加する必要があります。
>>> from functools import reduce
組み込みreduce()
がPython 3から削除され、現在はに存在するためfunctools.reduce()
。