Bergabunglah dengan daftar string dengan python dan bungkus setiap string dengan tanda kutip


104

Aku mendapat:

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

Saya ingin memiliki:

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

Apa cara termudah untuk melakukan ini dengan Python?

Jawaban:


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

1
@Meow yang menggunakan repryang sedikit hacky dalam kasus khusus ini sebagai lawan menjelaskan dengan kutipan
jamylak

1
@jamlak ok, repr sepertinya lebih aman bagi saya jika Anda memiliki kutipan dalam string Anda.
Meong

51

Anda juga dapat melakukan satu formatpanggilan

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

Pembaruan: Beberapa pembandingan (dilakukan pada mbp 2009):

>>> 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

Jadi sepertinya itu formatcukup mahal

Pembaruan 2: mengikuti komentar @ JCode, menambahkan a mapuntuk memastikan itu joinakan berfungsi, Python 2.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

apakah ini memiliki kinerja yang lebih baik daripada yang diusulkan oleh jamylak?
kadrian

3
Ini adalah solusi yang lebih baik daripada jawaban yang diterima.
sage88

2
@ sage88 Tidak. Pra-pengoptimalan itu buruk, ada kemungkinan 0,0000001% bahwa perbedaan kecepatan yang sangat kecil di sini adalah penyebab utama dari skrip Python. Kode ini juga kurang intuitif sehingga tidak lebih baik , sangat sedikit lebih cepat . Solusi saya lebih pythonic dan dapat dibaca
jamylak

@marchelbling Benchmark tidak valid karena solusi jamylak 'juga berfungsi untuk iterable non-string. Ganti .join(words)dengan .join(map(str, words))dan tunjukkan kami bagaimana kelanjutannya.
WloHu

@JCode memperbarui patokan. Celahnya lebih kecil tetapi masih ada keuntungan 2x di mesin saya.
marchelbling

40

Anda bisa mencoba ini:

str(words)[1:-1]

3
bagaimana cara menambahkan tanda kutip?
Dejell

6
Ini menambahkan tanda kutip tunggal, bukan ganda, tetapi tanda kutip di dalam kata akan secara otomatis di-escape. 1 untuk kepintaran.
Félix Caron

Ini adalah salah satu informasi cerdas yang membuat Python sangat bermanfaat.
Max von Hippel

Ini sangat luar biasa, suka saja, tetapi saya mungkin akan menggunakan solusi lain hanya untuk membuat kode sedikit lebih intuitif untuk sesama pengembang.
Yash Sharma


4

Versi terbaru dari jawaban @jamylak dengan F Strings (untuk python 3.6+), saya telah menggunakan backticks untuk string yang digunakan untuk skrip SQL.

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

Bekerja, tetapi apakah itu dianggap sebagai cara pythonic kanonik?
Marcel Flygare
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.