【问题标题】:Join string and None/string using optional delimiter使用可选分隔符连接字符串和无/字符串
【发布时间】:2010-09-20 14:08:53
【问题描述】:

我基本上是在找相当于这个VB/VBA字符串操作的Python:

FullName = LastName & ", " + FirstName

在 VB/VBA 中,+& 都是连接运算符,但它们处理 Null 值的方式不同:

"Some string" + Null ==> Null
"Some string" & Null ==> "Some string"

此隐藏功能允许我编写的第一行代码在必需的 LastName 和可选的 FirstName 值之间包含逗号和空格。如果 FirstName 为 Null(Null 是 Python 的 None 的 VB/VBA 等效项),FullName 将被设置为 LastName,没有尾随逗号。

在 Python 中是否有一种单行惯用的方式来执行此操作?

技术说明
gnibbler 和 eumiro 的答案并不严格等同于 VB/VBA 的 +&。使用他们的方法,如果 FirstName 是空字符串 ("") 而不是 None,则不会有尾随逗号。在几乎所有情况下,这都比 VB/VBA 的结果更可取,后者是在尾随逗号添加一个空白的 FirstName。

【问题讨论】:

    标签: python string


    【解决方案1】:

    以下行可用于连接更多非无元素:

    FullName = ', '.join(filter(None, (LastName, FirstName)))
    

    【讨论】:

    • gnibbler's 最清晰,最适合单个简单的 concat。但这正是我加入整个列表时所需要的。
    • 这比我接受的答案要清晰得多,而且在我看来更像是pythonic。
    • PyCharm 在这一行发出警告:expected type 'Iterable[str]', got 'Iterator[dict]' instead
    【解决方案2】:
    FullName = LastName + (", " + FirstName if FirstName else "")
    

    【讨论】:

      【解决方案3】:

      简单的三元运算符会做:

      >>> s1, s
      ('abc', None)
      >>> print(s if s is None else s1 + s)
      None
      >>> print(s1 if s is None else s1 + s)
      abc
      

      【讨论】:

        猜你喜欢
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 2020-07-27
        • 2016-06-04
        相关资源
        最近更新 更多