在 Python 中拆分字符串并忽略空字符串
Split string and ignore empty strings in Python
要拆分字符串并忽略空字符串:
- 使用
str.split()
方法将字符串拆分为列表。 None
作为函数的第一个参数传递filter()
,列表作为第二个参数传递。- 该
filter()
函数将从列表中删除所有空字符串。
my_str = ',one,two,three,' my_list = list(filter(None, my_str.split(','))) print(my_list) # 👉️ ['one', 'two', 'three'] # Alternative (list comprehension) # 👇️ ['one', 'two', 'three'] print([word for word in my_str.split(',') if word])
我们使用该str.split()
方法将字符串拆分为列表。
my_str = ',one,two,three,' # 👇️ ['', 'one', 'two', 'three', ''] print(my_str.split(','))
str.split ()
方法使用定界符将字符串拆分为子字符串列表。
该方法采用以下 2 个参数:
姓名 | 描述 |
---|---|
分隔器 | 在每次出现分隔符时将字符串拆分为子字符串 |
最大分裂 | 最多maxsplit 完成拆分(可选) |
如果在字符串中找不到分隔符,则返回仅包含 1 个元素的列表。
下一步是使用该filter()
函数从结果中排除所有空字符串。
my_str = ',one,two,three,' my_list = list(filter(None, my_str.split(','))) print(my_list) # 👉️ ['one', 'two', 'three']
filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。
None
函数参数,则 iterable 的所有虚假元素都将被删除。所有不真实的值都被认为是虚假的。Python 中的虚假值是:
- 定义为 falsy 的常量:
None
和False
. 0
任何数字类型的(零)- 空序列和集合:(
""
空字符串),()
(空元组),[]
(空列表),{}
(空字典),set()
(空集),range(0)
(空范围)。
请注意,该filter()
函数返回一个过滤器对象(不是列表)。如果需要将对象转换为列表,请将其传递给list()
类。
使用后保留空字符串的默认行为str.split()
是这样我们就可以使用相同的分隔符将列表连接到相同的字符串中。
my_str = ',one,two,three,' my_list = my_str.split(',') print(my_list) # 👉️ ['', 'one', 'two', 'three', ''] my_str_again = ','.join(my_list) print(my_str_again) # 👉️ ',one,two,three,'
如果我们从列表中删除空字符串,然后将列表连接成一个字符串,我们将最终删除前导和尾随的逗号。
my_str = ',one,two,three,' my_list = list(filter(None, my_str.split(','))) print(my_list) # 👉️ ['', 'one', 'two', 'three', ''] my_str_again = ','.join(my_list) print(my_str_again) # 👉️ 'one,two,three'
拆分字符串并忽略空字符串的另一种方法是使用列表理解。
要拆分字符串并忽略空字符串:
- Use the
str.split()
method to split the string into a list. - Use a list comprehension to iterate over the list.
- On each iteration, check if the list item is truthy to exclude empty strings
from the result.
my_str = ',one,two,three,' my_list = [word for word in my_str.split(',') if word] print(my_list) # 👉️ ['one', 'two', 'three']
We used the str.split()
method to split the string on each occurrence of a
comma and a list comprehension to iterate over the list.
On each iteration, we simply check if the string is truthy, and since empty
strings are not, we exclude them from the result.
您选择哪种方法是个人喜好的问题。如果您不熟悉函数作为第一个参数filter()
传递时的工作原理,列表理解方法应该更容易阅读并且更明确。None