2011-12-24 10 views
43

Mam cztery ciągi i każdy z nich może być pusty. Muszę połączyć je w jeden ciąg ze spacjami między nimi. Jeśli używam:Łączenie wielu ciągów, jeśli nie są puste w Pythonie

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

Rezultatem jest puste miejsce na początku nowego napisu jeśli string1 jest pusty. Mam również trzy spacje, jeśli string2 i string3 są puste.

Jak mogę łatwo dołączyć do nich bez pustych miejsc, gdy ich nie potrzebuję?

Odpowiedz

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

Korzystając None w zaproszeniu filter(), usuwa wszystkie elementy falsy.

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

Lepiej użyj '! =' Zamiast 'is not'. To może działać, ale nie jest gwarantowane. Lub po prostu użyj '[x dla x w ciągach, jeśli x]'. –

+5

** Nigdy ** nie używaj 'nie jest' dla osób nie będących singletonami, jeśli tak naprawdę nie chcesz sprawdzać, czy oba są tymi samymi obiektami! – ThiefMaster

9

Jeśli wiesz, że struny nie mają wiodącej/końcowe białe znaki:

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

inaczej:

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

i jeśli któryś z ciągów mieć non-wiodącej/końcowe białe znaki, być może będziesz musiał pracować jeszcze ciężej. Proszę wyjaśnij, co faktycznie masz.

+0

Ciągi pochodzą z pól tekstu wejściowego, więc wszystko jest możliwe. Dzięki! – Goran