Mam:

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

Chcę mieć:

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

Jaki jest najłatwiejszy sposób na to z Pythonem?

132
kadrian 17 sierpień 2012, 18:26

5 odpowiedzi

Najlepsza odpowiedź
>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> ', '.join('"{0}"'.format(w) for w in words)
'"hello", "world", "you", "look", "nice"'
195
jamylak 17 sierpień 2012, 14:28

Możesz także wykonać pojedyncze połączenie {x0}}

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

Aktualizacja: Niektóre benchmarking (wykonane na 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

Wygląda na to, że format jest w rzeczywistości dość drogie

Aktualizacja 2: Następujący komentarz @ jcode, dodając map, aby zapewnić, że join będzie działać, 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
51
marchelbling 19 październik 2017, 13:32

Możesz spróbować tego:

str(words)[1:-1]
44
Thykof 16 sierpień 2016, 21:55
>>> ', '.join(['"%s"' % w for w in words])
7
jamylak 17 sierpień 2012, 14:32

Zaktualizowana wersja @jamalak Odpowiedź z ciągami F (dla Python 3.6+), używałem backticks dla ciąg używanego do skryptu SQL.

keys = ['foo', 'bar' , 'omg']
', '.join(f'`{k}`' for k in keys)
# result: '`foo`, `bar`, `omg`'
4
Gruber 22 listopad 2019, 23:01