リスト内のアイテムを文字列に連結します


574

リスト内の文字列アイテムを単一の文字列に連結する簡単な方法はありますか?このstr.join()機能は使えますか?

たとえば、これは入力で['this','is','a','sentence']あり、これは望ましい出力ですthis-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str

24
'-'.join(sentence)
オーランド

回答:


1053

使用join

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'

13
理解できませんでした。左側の「-」は何ですか?
ローレンスDeSouza 14

5
@LawrenceDeSouza結合する文字列。ドキュメントを参照するか、この回答をもう少し詳しく説明します。
Burhan Khalid

9
sentence.join(" ")逆の操作なので、私も同様に機能することを期待していましたlist.split(" ")。これがリストのPythonのメソッドに追加されるかどうかはわかりませんか?
Wouter Thielen 2015

10
@Wouter、それはしません。一方では、文字列のリストのみを結合できます。そのlist.joinため、任意のリストには不適切です。一方、の引数はstr.join、単なるリストではなく、「反復可能な」文字列のシーケンスです。意味のある唯一のものは組み込み関数join(list, sep)です。string本当に必要な場合は、(基本的に廃止された)モジュールに1つあります。
アレクシス

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

Pythonリストを文字列に変換するより一般的な方法は次のとおりです。

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str = ''.join(map(str, my_lst))
>>> print(my_lst_str)
'12345678910'

3
入力が文字列のときにリストの理解が必要なのはなぜですか?またmap(str, my_lst))=リストを列挙することなく、十分だろう
alvas

5
この質問に対する答えのほとんどは、リストに文字列が含まれている場合を考慮しています。Mineは、リストを文字列に変換する一般的な方法です。私の例では、リストはintタイプですが、文字列として表現できる任意のタイプにすることができます。
6パックの子供、2015

3
これに追加するには、マップはラムダ関数と一緒に使用した場合にも役立ちます。たとえば、' '.join(map(lambda x: ' $'+ str(x), my_lst))返されます'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC 2017年

3
マップを追加すると、文字列以外のデータ型が実際に役立ちます。すごい!
appleboy

40

初心者にとって、結合が文字列メソッドである理由を知ることは非常に役立ち ます

最初は非常に奇妙ですが、その後は非常に便利です。

結合の結果は常に文字列ですが、結合されるオブジェクトは多くのタイプ(ジェネレーター、リスト、タプルなど)になる可能性があります。

.joinメモリの割り当ては1回だけなので、高速です。従来の連結よりも優れています(拡張説明を参照)。

一度習得すれば、とても快適で、このようなトリックを実行して括弧を追加できます。

>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

12

@Burhanハリドの答えは良いですが、私はそれがこのような、より理解しやすいと思います。

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 

join()の2番目の引数はオプションであり、デフォルトは ""です。

編集:この関数はPython 3で削除されました


14
この関数は2.xで非推奨になり、3.xで削除される予定です。それが事実であるので、私はこれを他の答えよりも使うことはお勧めしません。
マシューグリーン

@Mathew Greenこの回答とBurhan Khalidの回答は同じ関数をさまざまな方法で使用しているため、彼の回答も非推奨になりました。しかし、それを指摘してくれてありがとう、3.xに参加する方法を見つけました。しかし、2.xを使用している場合、それはなくなるわけではありません。
SilentVoid 2015年

1
彼は非難されていません。推奨事項は、Lib / string.pyの関数を使用しており、これはまったく異なり非推奨ですが、@ BurhanKhalidの回答では、非推奨ではない組み込みの文字列メソッドを使用しています。彼の答えは現在最も正確なものですが、これは今のところ2.xでのみ有効です。
マシューグリーン

この代替案を宣伝したい場合は、以前のコメントで概説した理由により、これは推奨されないという警告も含める必要があります。
マシューグリーン

2

文字列を結合する方法を指定できます。「-」の代わりに、「」を使用できます

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)

2

Pythonのreduce関数も使用できます。

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

4
必要以上の複雑さ、なぜ単に使用しないのjoinですか?
Sebastian Palma

-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)

2
このコードスニペットが解決策となる可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
alan.elkin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.