使用可选分隔符连接字符串和 None/字符串

31

我基本上正在寻找Python中与此VB/VBA字符串操作相当的等效方法:

FullName = LastName & ", " + FirstName

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

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

这个隐藏的特性允许我在写的第一行代码中,在必需的 LastName 和可选的 FirstName 值之间包括逗号和空格。如果 FirstName 是 Null(Null 是 VB/VBA 中的 None),FullName 将被设置为 LastName,没有尾随逗号。

在 Python 中有没有一种一行的惯用方法来做到这一点?

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

3个回答

127
以下代码行可以用于连接多个非None元素:
FullName = ', '.join(filter(None, (LastName, FirstName)))

4
Gnibbler的方法对于单个简单的连接是最清晰和最好的。但是这个方法恰好适用于我需要连接整个列表的情况。 - CrazyPyro
1
这比被接受的答案更清晰,而且在我看来更符合Pythonic风格。 - Asa Stallard
PyCharm 在这一行发出警告:期望类型为 'Iterable[str]',但实际得到的是 'Iterator[dict]' - geher
比接受的答案更好。如果LastName是空值,FullName将包含“None”。 - Abpostman1

31
FullName = LastName + (", " + FirstName if FirstName else "")

0

简单的三元运算符就可以了:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接