2011-12-24 6 views
43

4 개의 문자열이 있고 그 중 하나가 비어있을 수 있습니다. 나는 그들을 그들 사이에 공백이있는 한 줄로 묶어야한다. 내가 사용하는 경우 :여러 문자열이 파이썬에서 비어 있지 않은 경우 조인

new_string = string1 + ' ' + string2 + ' ' + string3 + ' ' + string4 

string1이 비어있는 경우, 결과는 새 문자열의 시작 부분에 빈 공간이다. 또한 string2string3이 비어 있으면 세 개의 공백이 있습니다.

필자는 필요하지 않은 경우 어떻게 공백없이 쉽게 가입 할 수 있습니까?

답변

100
>>> strings = ['foo','','bar','moo'] 
>>> ' '.join(filter(None, strings)) 
'foo bar moo' 

filter()None 호출을 사용함으로써, 모든 falsy 요소를 제거한다.

-2
strings = ['foo','','bar','moo'] 
' '.join([x for x in strings if x is not '']) 
'foo bar moo' 
+4

'is not' 대신'! ='를 사용하는 것이 더 좋습니다. 효과가있을 수도 있지만 보장 할 수는 없습니다. 아니면 그냥'[x는 문자열이면 x]'를 사용하십시오. –

+5

** ** 실제로 ** 둘 다 같은 객체인지 확인하고 싶지 않으면 ** 비 - 싱글 톤을 위해'is not'를 사용하십시오! – ThiefMaster

9

당신이 문자열이 더 앞/뒤의 공백이 없다는 것을 알고있는 경우 : 그렇지

>>> strings = ['foo','','bar','moo'] 
>>> ' '.join(x for x in strings if x) 
'foo bar moo' 

:

>>> strings = ['foo ','',' bar', ' ', 'moo'] 
>>> ' '.join(x.strip() for x in strings if x.strip()) 
'foo bar moo' 

와 문자열의 비를 선도/후행 공백이있는 경우, 당신은 더 열심히 일해야 할 수도 있습니다. 실제로 가지고있는 것이 무엇인지 명확히하십시오.

+0

문자열은 입력 텍스트 필드에서 비롯되어 모든 것이 가능합니다. 감사! – Goran

관련 문제