목록의 항목을 문자열로 연결


574

목록의 문자열 항목을 단일 문자열로 연결하는 더 간단한 방법이 있습니까? str.join()기능을 사용할 수 있습니까 ?

예를 들어 이것은 입력 ['this','is','a','sentence']이며 원하는 출력입니다this-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str

24
'-'.join(sentence)
aland

답변:


1052

사용 join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'

13
이해하지 못했습니다. 왼쪽의 '-'는 무엇입니까?
Lawrence DeSouza

5
@LawrenceDeSouza 결합하려는 문자열입니다. 참조 문서 , 또는 이 대답 비트 더 세부로 들어갑니다.
Burhan Khalid

9
sentence.join(" ")역 작업이이므로 작동 할 것으로 예상 됩니다 list.split(" "). 이것이 목록에 대한 파이썬의 메소드에 추가 될지 아십니까?
Wouter Thielen

10
@Wouter, 그렇지 않습니다. 한편으로는 문자열 목록 만 결합 할 수 있습니다. 그래서 list.join임의의 목록에 부적합 할 수. 다른 한편으로,의 인수는 str.join단순히 목록이 아니라 "반복 가능한"문자열 시퀀스 일 수 있습니다. 이해할 수있는 유일한 것은 내장 함수입니다 join(list, sep). string당신이 정말로 원한다면 (기본적으로 쓸모없는) 모듈에 하나 있습니다.
Alexis

4
@ 레오' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

파이썬 목록을 문자열로 변환하는보다 일반적인 방법은 다음과 같습니다.

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str = ''.join(map(str, my_lst))
>>> print(my_lst_str)
'12345678910'

3
입력이 문자열 일 때 왜 목록 이해가 필요한가? 또한 map(str, my_lst)목록을 열거하지 않고 충분합니다 =)
alvas

5
이 질문에 대한 대부분의 답변은 목록에 문자열이있는 경우를 고려하고 있습니다. 광산은 목록을 문자열로 변환하는 일반적인 방법입니다. 내 예제에서 목록은 유형 int이지만 문자열로 표현할 수있는 모든 유형이 될 수 있습니다.
6pack 아이 1

3
이것에 추가하기 위해 람다 함수와 함께 사용할 때 map도 유용합니다. 예를 들어 ' '.join(map(lambda x: ' $'+ str(x), my_lst))반환'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
지도를 추가하면 실제로 문자열과는 별도로 데이터 유형에 도움이됩니다. 큰!
appleboy 2012

40

join이 string 메소드 인 이유 를 초보자가 아는 것이 매우 유용합니다 .

처음에는 매우 이상하지만 이후에는 매우 유용합니다.

결합 결과는 항상 문자열이지만 결합 할 오브젝트는 여러 유형 (제너레이터, 목록, 튜플 등) 일 수 있습니다.

.join메모리를 한 번만 할당하기 때문에 더 빠릅니다. 기존 연결보다 낫습니다 ( 확장 된 설명 참조 ).

일단 배우면 매우 편안하며 괄호를 추가하기 위해 이와 같은 트릭을 수행 할 수 있습니다.

>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

12

하지만 @Burhan 칼리드의 대답은 좋다, 나는이 같은 더 이해할 수 있다고 생각 :

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 

join ()의 두 번째 인수는 선택 사항이며 기본값은 ""입니다.

편집 :이 함수는 파이썬 3에서 제거되었습니다


14
이 기능은 2.x에서 더 이상 사용되지 않으며 3.x에서 제거됩니다. 이 경우 제공된 다른 답변보다 이것을 사용하지 않는 것이 좋습니다.
Matthew Green

@Mathew Green이 답변과 Burhan Khalid의 답변은 다른 방식으로 동일한 기능을 사용하므로 그의 답변도 더 이상 사용되지 않습니다. 그러나 그것을 지적 해 주셔서 감사합니다. 그러나 2.x를 사용하는 경우 사라지지 않습니다.
SilentVoid

1
그의 사용은 더 이상 사용되지 않습니다. 회원님의 추천 완전히 다른 lib 디렉토리 / string.py에서 함수 사용 @BurhanKhalid 응답 사용하는 반면되지를 내장되지되지 않은 문자열 방법. 그의 대답은 현재 가장 정확한 답이며 앞으로는 2.x에서만 유효합니다.
Matthew Green

이 대안을 홍보하려면 이전 의견에서 설명한 이유로 권장하지 않는다는 경고도 포함시켜야합니다.
Matthew Green

2

문자열을 결합하는 방법을 지정할 수 있습니다. '-'대신 ''

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)

2

우리는 또한 파이썬을 사용할 수 있습니다 reduce 함수를 :

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

4
너무 복잡하지 않은 복잡한 이유는 join무엇입니까?
Sebastian Palma

-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)

2
이 코드 스 니펫이 해결책이 될 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
alan.elkin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.