Об’єднання кількох рядків, якщо вони не порожні в Python


82

У мене чотири рядки, і будь-яка з них може бути порожньою. Мені потрібно об’єднати їх в один рядок з пробілами між ними. Якщо я використовую:

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

Результат - пробіл на початку нового рядка, якщо string1він порожній. Крім того, у мене є три порожні пробіли, якщо string2і string3порожні.

Як я можу легко приєднатися до них без пробілів, коли вони мені не потрібні?

Відповіді:


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

Використовуючи Noneу filter()виклику, він видаляє всі хибні елементи.


2
Як можна застосувати це рішення, застосовуючи це до стовпця кадру даних. Коли ви намагаєтесь df.apply(", ".join(filter(None, ...)), axis=1). Як передається другий аргумент функції фільтра?
Майкл

23

Якщо ви ЗНАЄТЕ, що рядки не мають пробілів, що ведуть / завершують:

>>> 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'

і якщо в будь-якому з рядків є пробіли, що не ведуть / відстають, можливо, вам доведеться ще більше працювати. Будь ласка, поясніть, що саме Ви маєте насправді.


Рядки надходять із текстових полів введення, тому все можливо. Дякую!
Горан

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

4
Краще використовувати !=замість is not. Це може спрацювати, але це не гарантовано. Або просто використовувати [x for x in strings if x].
Тім Піцкер

7
Ніколи не використовуйте is notдля несінглтон, якщо ви насправді не хочете перевірити, чи є обидва однакові об'єкти!
ThiefMaster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.