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


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.