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

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

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

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

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

【问题讨论】:

    标签: python string join


    【解决方案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))) - 它已经在我的代码中进行了测试,应该适用于你或任何人 - 以及
    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 2013-09-15
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2016-05-27
    相关资源
    最近更新 更多