如果它们在 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
为空,则结果是新字符串开头的空格。另外,如果string2
和string3
为空,我有三个空格。
当我不需要它们时,如何轻松加入它们而不需要空格?
【问题讨论】:
【参考方案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 中不为空,则连接多个字符串的主要内容,如果未能解决你的问题,请参考以下文章
mongodb/mongoose:如果来自nestjs的数据不为空,则保存唯一值
如果 col1 值退出两次并且 col2 不为空,则选择行