Присоединяйтесь к списку строк в 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.