Pythonで文字列のリストに参加し、各文字列を引用符で囲みます


101

私が持っている:

words = ['hello', 'world', 'you', 'look', 'nice']

欲しい:

'"hello", "world", "you", "look", "nice"'

Pythonでこれを行う最も簡単な方法は何ですか?

回答:


173
>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> ', '.join('"{0}"'.format(w) for w in words)
'"hello", "world", "you", "look", "nice"'

1
@Meow reprは、引用符で明確にするのとは対照的に、この特定のケースでlil hackyを使用しています
jamylak

1
@jamlakわかりました。文字列に引用符がある場合、reprは私にとってより安全に思えました。
ニャー

50

単一のformat呼び出しを実行することもできます

>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> '"{0}"'.format('", "'.join(words))
'"hello", "world", "you", "look", "nice"'

更新:いくつかのベンチマーク(2009 mbpで実行):

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.32559704780578613

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; '"{}"'.format('", "'.join(words))""").timeit(1000)
0.018904924392700195

だからそれformatは実際にはかなり高価なようです

更新2:@JCodeのコメントに続き、動作することmapを確認するためにを追加しjoinます。Python2.7.12

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.08646488189697266

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; '"{}"'.format('", "'.join(map(str, words)))""").timeit(1000)
0.04855608940124512

>>> timeit.Timer("""words = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.17348504066467285

>>> timeit.Timer("""words = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; '"{}"'.format('", "'.join(map(str, words)))""").timeit(1000)
0.06372308731079102

これはjamylakによって提案されたものより優れたパフォーマンスを持っていますか?
kadrian

3
これは、受け入れられた回答よりも優れたソリューションです。
sage88 2015

2
@ sage88いいえ、そうではありません。事前最適化は悪です。0.0000001%の確率で、非常に小さな速度の違いがPythonスクリプトのボトルネック全体である可能性があります。また、このコードは直感的ではないため、あまり良くなく、わずかに高速です。私のソリューションは、より多くのニシキヘビ、読み取り可能である
jamylak

@marchelblingベンチマークは無効です。なぜなら、jamylakの解は文字列以外の反復可能オブジェクトに対しても機能するためです。に置き換え.join(words).join(map(str, words))、それがどのように行われるかを示してください。
WloHu

@JCodeはベンチマークを更新しました。ギャップは小さいですが、私のマシンでは2倍のゲインがあります。
2017年

39

あなたはこれを試すことができます:

str(words)[1:-1]

3
どのように引用符を追加しますか?
Dejell

6
これにより、二重引用符ではなく単一引用符が追加されますが、単語内の引用符は自動的にエスケープされます。賢さの+1。
フェリックス・キャロン

これは、Pythonを非常にやりがいのあるものにする賢いヒントの1つです。
Max von Hippel 2017

これはすごいです、大好きですが、おそらく他のソリューションを使用して、仲間の開発者にとってコードをもう少し直感的にするつもりです。
Yash Sharma


3

Fストリング(python 3.6+用)を使用した@jamylak回答の更新バージョンで、SQLスクリプトに使用されるストリングにバックティックを使用しました。

keys = ['foo', 'bar' , 'omg']
', '.join(f'`{k}`' for k in keys)
# result: '`foo`, `bar`, `omg`'

動作しますが、それは標準的なpythonicの方法であると考えられていますか?
Marcel Flygare
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.