파이썬에서 문자열 목록을 결합하고 각 문자열을 따옴표로 묶습니다.


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 repr는 따옴표로 명확
해지는 것과는 반대로이

1
@jamlak 좋아, repr은 문자열에 따옴표가 있으면 나에게 더 안전 해 보였습니다.
Meow

51

단일 format통화를 수행 할 수도 있습니다.

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

업데이트 : 일부 벤치마킹 (2009mbp에서 수행됨) :

>>> 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하는지 확인하기 위해 joinPython 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

이것이 jamylak이 제안한 것보다 더 나은 성능을 가지고 있습니까?
kadrian

3
이것은 받아 들여진 대답보다 더 나은 해결책입니다.
sage88 2015

2
@ sage88 아니요 그렇지 않습니다. 사전 최적화는 사악합니다. 여기서 미세한 속도 차이가 Python 스크립트의 전체 병목 현상 일 가능성이 0.0000001 %입니다. 이되지 않도록 또한이 코드는 훨씬 직관적이고 더 나은 그것이, 아주 약간 빠른 . 내 솔루션보다 파이썬하고 읽기
jamylak

@marchelbling Benchmark는 jamylak의 솔루션이 비 문자열의 반복 가능에도 작동하기 때문에 유효하지 않습니다. 로 교체 .join(words)하고 .join(map(str, words))어떻게 진행되는지 보여주세요.
WloHu

@JCode가 벤치 마크를 업데이트했습니다. 간격은 더 작지만 내 컴퓨터에는 여전히 2 배의 이득이 있습니다.
marchelbling

40

이것을 시도 할 수 있습니다.

str(words)[1:-1]

3
따옴표를 어떻게 추가합니까?
Dejell

6
이렇게하면 큰 따옴표 대신 작은 따옴표가 추가되지만 단어 내부의 따옴표는 자동으로 이스케이프됩니다. 영리함을 위해 +1.
Félix Caron

이것은 Python을 매우 보람있게 만드는 영리한 정보 중 하나입니다.
Max von Hippel

이것은 너무 놀랍습니다. 그냥 좋아합니다.하지만 동료 개발자들에게 코드를 좀 더 직관적으로 만들기 위해 다른 솔루션을 사용할 것입니다.
Yash Sharma


4

F Strings (python 3.6 이상용)로 @jamylak 답변의 업데이트 버전, SQL 스크립트에 사용되는 문자열에 백틱을 사용했습니다.

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

작동하지만 표준 비단뱀 방식으로 간주됩니까?
Marcel Flygare
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.