在 Python 中连接多个可能没有值的字符串

目录

Join multiple Strings with possibly None values in Python

  1. 在 Python 中连接多个可能没有值的字符串
  2. 加入多个字符串,如果它们在 Python 中不为空

在 Python 中连接多个可能没有值的字符串

加入可能有 None 值的多个字符串:

  1. 使用join()带有可选分隔符的方法。
  2. 使用filter()函数过滤掉任何None值。
  3. join()方法返回一个字符串,该字符串是可迭代对象中字符串的串联。
主程序
str_1 = 'Bobby' str_2 = None str_3 = 'Hadz' result = ', '.join(filter(None, [str_1, str_2, str_3])) print(result) # 👉️ "Bobby, Hadz"

我们传递了一个逗号作为分隔符,但您可以根据您的用例进行调整。

下面是一个使用空格作为分隔符的示例。

主程序
str_1 = 'Bobby' str_2 = None str_3 = 'Hadz' result = ' '.join(filter(None, [str_1, str_2, str_3])) print(result) # 👉️ "Bobby Hadz"

如果不需要字符串之间的分隔符,请join()对空字符串调用该方法。

主程序
str_1 = 'Bobby' str_2 = None str_3 = 'Hadz' result = ''.join(filter(None, [str_1, str_2, str_3])) print(result) # 👉️ "BobbyHadz"

str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联

处理列表中的非字符串值

TypeError请注意,如果可迭代对象中有任何非字符串值,该方法将引发 a 。

如果您加入的某些值不是字符串类型,请使用该map()
函数将它们转换。

主程序
str_1 = 'Bobby' str_2 = None str_3 = 'Hadz' str_4 = 500 result = ', '.join( filter( None, map(str, [str_1, str_2, str_3, str_4]) ) ) print(result) # 👉️ "Bobby, None, Hadz, 500"

map ()函数将一个函数和一个可迭代对象作为参数,并使用可迭代对象的每个项目调用该函数。

map()使用列表中的每个元素调用该函数,并将每个值传递给str()类。

调用该方法的字符串join()用作元素之间的分隔符。

主程序
my_list = ['a', 'b', 'c'] my_str = '-'.join(my_list) print(my_str) # 👉️ "a-b-c"

我们使用该函数从列表中filter()过滤掉任何值。None

主程序
str_1 = 'Bobby' str_2 = None str_3 = 'Hadz' result = ', '.join(filter(None, [str_1, str_2, str_3])) print(result) # 👉️ "Bobby, Hadz"

filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。

如果您传递None函数参数,则 iterable 的所有虚假元素都将被删除。

所有不真实的值都被认为是虚假的。Python 中的虚假值是:

  • 定义为 falsy 的常量:NoneFalse.
  • 0任何数字类型的(零)
  • 空序列和集合:(""空字符串),()(空元组),[]
    (空列表),
    {}(空字典),set()(空集),range(0)(空范围)。

使用生成器表达式代替filter()

您也可以使用
生成器表达式
代替
filter()函数。

主程序
str_1 = 'Bobby' str_2 = None str_3 = 'Hadz' result = ' '.join( value for value in [str_1, str_2, str_3] if value is not None ) print(result) # 👉️ Bobby Hadz

我们使用生成器表达式来迭代值列表。

生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。

在每次迭代中,我们
检查当前值是否不为 None并返回结果。

str.join()方法仅使用 not-None 值调用,因此代码示例实现与使用该filter()函数相同的结果。

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

如果您需要加入多个不为空的字符串:

  1. 使用该filter()函数过滤掉所有虚假值。
  2. join()在字符串分隔符上调用该方法。
  3. 将过滤器对象传递给join()方法。
主程序
my_strings = ['apple', '', 'banana', '', 'kiwi', ''] result = ' '.join(filter(None, my_strings)) print(result) # 👉️ 'apple banana kiwi'

filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。

如果您传递None函数参数,则 iterable 的所有虚假元素都将被删除。

主程序
my_strings = ['apple', '', 'banana', '', 'kiwi', '', None, 0] # 👇️ ['apple', 'banana', 'kiwi'] print(list(filter(None, my_strings)))

请注意,列表中的所有虚假值都在结果中被过滤掉了。

所有不真实的值都被认为是虚假的。Python 中的虚假值是:

  • 定义为 falsy 的常量:NoneFalse.
  • 0任何数字类型的(零)
  • 空序列和集合:(""空字符串),()(空元组),[]
    (空列表),
    {}(空字典),set()(空集),range(0)(空范围)。

str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联

TypeError请注意,如果可迭代对象中有任何非字符串值,该方法将引发 a 。

处理列表中的非字符串值

如果您的列表包含数字或其他类型,请在调用之前将所有值转换为字符串join()

主程序
my_strings = ['apple', 1, 'banana', 2, 'kiwi', '', None, 0] result = ' '.join(map(str, filter(None, my_strings))) print(result) # 👉️ 'apple 1 banana 2 kiwi'

调用该方法的字符串用作元素之间的分隔符。

主程序
my_strings = ['apple', '', 'banana', '', 'kiwi', ''] result = '-'.join(filter(None, my_strings)) print(result) # 👉️ 'apple-banana-kiwi'

如果您不需要分隔符而只想将可迭代的元素连接到一个字符串中,请join()在空字符串上调用该方法。

主程序
my_strings = ['a', '', 'b', '', 'c', ''] result = ''.join(filter(None, my_strings)) print(result) # 👉️ 'abc'

使用生成器表达式连接多个不为空的字符串

仅当字符串不为空时才连接字符串的另一种方法是使用生成器表达式。

主程序
my_strings = ['apple', '', 'banana', '', ' ', 'kiwi', ''] result = ' '.join(item for item in my_strings if item.strip()) print(result) # 👉️ 'apple banana kiwi'

str.strip方法返回删除了前导和尾随空格字符串副本。

我们用它来确保结果中没有任何只包含空格的字符串。

我们将生成器表达式传递给该str.join()方法。

生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: