如果在Python中不为空,则连接多个字符串


77

我有四个字符串,其中任何一个都可以为空。我需要将它们连接成一个字符串,并在它们之间留有空格。如果我使用:

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

如果string1为空,结果将是新字符串开头的空白。另外,如果string2string3为空,则我有三个空格。

当我不需要空格时,如何轻松地加入它们?

Answers:


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

通过Nonefilter()调用中使用,它将删除所有虚假元素。


2
将其应用于数据框的列时如何应用此解决方案。当你尝试的时候df.apply(", ".join(filter(None, ...)), axis=1)。一个如何传递filter函数的第二个参数?
迈克尔

22

如果您知道字符串没有前导/尾随空格:

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

并且如果任何字符串具有非前导/尾随空格,则可能需要更加努力。请说明您实际拥有的是什么。


字符串来自输入文本字段,因此一切皆有可能。谢谢!
Goran

-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.