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

Posted

技术标签:

【中文标题】如果它们在 Python 中不为空,则连接多个字符串【英文标题】:Joining multiple strings if they are not empty in Python 【发布时间】:2012-01-27 10:35:47 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

最好使用!= 而不是is not。它可能有效,但不能保证有效。或者只使用[x for x in strings if x] 永远不要使用is not,如果你真的不想检查两者是否是相同的对象!【参考方案3】:
>>> strings = ['foo','','bar','moo']
>>> ' '.join(filter(None, strings))
'foo bar moo'

通过在filter() 调用中使用None,它会删除所有虚假元素。

【讨论】:

将其应用于数据框的列时,如何应用此解决方案。当您尝试df.apply(", ".join(filter(None, ...)), axis=1)。如何传递过滤器函数的第二个参数? @Michael,试试", ".join(filter(None, df.apply(a_function_call_without_brackets_which_iterates_over_rows_of_df_and_returns_some_second_argument, axis=1))) - 它已经在我的代码中进行了测试,应该适用于你或任何人 - 以及

以上是关于如果它们在 Python 中不为空,则连接多个字符串的主要内容,如果未能解决你的问题,请参考以下文章

如果其他列不为空,则更新 3 列

mongodb/mongoose:如果来自nestjs的数据不为空,则保存唯一值

如果 col1 值退出两次并且 c​​ol2 不为空,则选择行

数据库SQL语句查询表中不为空的字段的数量为5的SQL语句?

Tableview 不显示我附加的数组,即使它们不为空

如何使用连接表检查房间查询中的空参数?