Присоединяйтесь к списку строк в Python и заключите каждую строку в кавычки


104

У меня есть:

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

Я хочу иметь:

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

Какой самый простой способ сделать это с помощью Python?

Ответы:


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

1
@Meow that uses that repris lil hacky в данном конкретном случае, в отличие от ясности с цитатами
jamylak

1
@jamlak хорошо, repr мне показалось более безопасным, если в вашей строке есть кавычки.
Мяу

51

вы также можете выполнить одиночный 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будет работать, 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

у этого есть лучшая производительность, чем у Джамылака?
Кадриан

3
Это лучшее решение, чем принятый ответ.
sage88

2
@ sage88 Нет, это не так. Предварительная оптимизация - это зло, существует вероятность 0,0000001%, что незначительная разница в скорости здесь является узким местом скрипта Python. Кроме того, этот код гораздо менее интуитивно понятен, поэтому он не лучше , он немного быстрее . Мое решение более питоническое и читабельное
jamylak

Тест @marchelbling недействителен, потому что решение jamylak работает также для итераций нестроковых элементов. Замените .join(words)на .join(map(str, words))и покажите нам, как это происходит.
WloHu

@JCode обновил тест. Разрыв меньше, но на моей машине все равно вдвое больше.
Marchelbling

40

Вы можете попробовать это:

str(words)[1:-1]

3
как добавить кавычки?
Dejell

6
Это добавляет одинарные кавычки вместо двойных, но кавычки внутри слов будут автоматически экранированы. +1 за сообразительность.
Félix Caron

Это один из тех умных моментов, которые делают Python таким полезным.
Макс фон Хиппель

Это так потрясающе, мне просто нравится, но я, вероятно, воспользуюсь другим решением, просто чтобы сделать код более интуитивно понятным для моих коллег-разработчиков.
Яш Шарма


4

Обновленная версия ответа @jamylak со строками F (для python 3.6+), я использовал обратные кавычки для строки, используемой для сценария SQL.

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

Работает, но считается ли это каноническим питоническим способом?
Марсель Флайгар,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.