从 Python 中的字符串列表中删除所有空字符串

目录

Remove empty strings from a list of Strings in Python

  1. 从 Python 中的字符串列表中删除空字符串
  2. 从 Python 列表中删除所有空元素

从 Python 中的字符串列表中删除空字符串

使用列表理解从字符串列表中删除空字符串。

列表理解将返回一个不包含任何空字符串的新列表。

主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] new_list = [item for item in my_list if item] print(new_list) # 👉️ ['bobby', 'hadz', 'com']

该示例使用
列表理解从列表中删除空字符串。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。

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

主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] new_list = [item for item in my_list if item] print(new_list) # 👉️ ['bobby', 'hadz', 'com']

空字符串是虚假值,因此它们会被过滤掉。

列表理解创建一个新列表,它不会改变原始列表。

通过重新分配从字符串列表中删除空字符串

如果要从原始列表中删除空字符串,请使用列表切片。

主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] my_list[:] = [item for item in my_list if item] print(my_list) # 👉️ ['bobby', 'hadz', 'com']

我们使用my_list[:]语法来获取代表整个列表的切片,因此我们可以直接分配给变量。

切片my_list[:]代表整个列表,所以当我们在左侧使用它时,我们正在分配给整个列表。

这种方法改变了原始列表的内容。

或者,您可以使用该filter()功能。

使用 filter() 从字符串列表中删除空字符串

这是一个三步过程:

  1. 使用该filter()函数过滤掉空字符串。
  2. 使用该类list()filter对象转换为列表。
  3. 新列表将不包含任何空字符串。
主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] new_list = list(filter(None, my_list)) print(new_list) # 👉️ ['bobby', 'hadz', 'com']

我们使用该filter()函数从列表中删除空字符串。

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

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

空字符串是一个虚假值,因此所有空字符串都会被删除。

最后一步是使用list()类将对象转换filter为列表。

或者,您可以使用for 循环

使用 for 循环从字符串列表中删除空字符串

这是一个三步过程:

  1. 使用for循环迭代列表的副本。
  2. 在每次迭代中,检查当前项是否为空字符串。
  3. 使用list.remove()方法删除空字符串。
主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] for item in my_list.copy(): if item == '': my_list.remove(item) print(my_list) # 👉️ ['bobby', 'hadz', 'com']

我们使用该list.copy()方法来获取列表的副本。

主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] # 👇️ ['bobby', '', 'hadz', '', 'com', ''] print(my_list.copy())

list.copy方法返回调用该方法的对象的浅表副本

这是必要的,因为我们不允许在迭代列表时从列表中删除项目。

但是,我们可以遍历列表的副本并从原始列表中删除项目。

主程序
my_list = ['bobby', '', 'hadz', '', 'com', ''] for item in my_list.copy(): if item == '': my_list.remove(item) print(my_list) # 👉️ ['bobby', 'hadz', 'com']
在每次迭代中,我们检查当前项是否为空字符串并使用该方法删除匹配元素。 list.remove()

list.remove ()方法从列表中删除第一项,其值等于传入的参数。

remove()方法改变了原始列表并
返回 None

在循环中从列表中删除项目时要注意的最重要的事情for是使用list.copy()方法迭代列表的副本。

如果您尝试遍历原始列表并从中删除项目,您可能会遇到难以定位的错误。

在 Python 中删除列表中的所有空元素

您还可以使用列表理解从列表中删除所有空元素。

主程序
# ✅ Remove empty elements from a list (using list comprehension) my_list = ['a', '', [], (), None, 'b', '', 'c'] new_list = [item for item in my_list if item] print(new_list) # 👉️ ['a', 'b', 'c']

该示例使用列表理解从列表中删除虚假值。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。
主程序
my_list = ['a', '', [], (), None, 'b', '', 'c'] new_list = [item for item in my_list if item] print(new_list) # 👉️ ['a', 'b', 'c']

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

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

  • 定义为 falsy 的常量:NoneFalse.
  • 0任何数字类型的(零)
  • 空序列和集合:(""空字符串),()(空元组),[]
    (空列表),
    {}(空字典),set()(空集),range(0)(空范围)。
换句话说,列表理解从列表中过滤掉None, , 空字符串,空列表,空元组等。 False

列表理解创建一个新列表,它不会改变原始列表。

从重新分配的列表中删除所有空元素

如果要从原始列表中删除空元素,请使用列表切片。

主程序
my_list = ['a', '', [], (), None, 'b', '', 'c'] my_list[:] = [item for item in my_list if item] print(my_list) # 👉️ ['a', 'b', 'c']

我们使用my_list[:]语法来获取代表整个列表的切片,因此我们可以直接分配给变量。

切片my_list[:]代表整个列表,所以当我们在左侧使用它时,我们正在分配给整个列表。

这种方法改变了原始列表的内容。

使用 filter() 从列表中删除所有空元素

或者,您可以使用该filter()功能。

主程序
my_list = ['a', '', [], (), None, 'b', '', 'c'] new_list = list(filter(None, my_list)) print(new_list) # 👉️ ['a', 'b', 'c']

我们使用该filter()函数从列表中删除空元素。

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

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

最后一步是使用list()类将filter对象转换为列表。

使用 for 循环从列表中删除所有空元素

或者,您可以使用for循环。

主程序
my_list = ['a', '', [], (), None, 'b', '', 'c'] for item in my_list.copy(): if not item: my_list.remove(item) print(my_list) # 👉️ ['a', 'b', 'c']
在每次迭代中,我们检查当前项是否为 falsy 并使用该方法删除匹配的元素。 list.remove()

list.remove ()方法从列表中删除第一项,其值等于传入的参数。

remove()方法改变原始列表并返回None

在循环中从列表中删除项目时要注意的最重要的事情for是使用list.copy()方法迭代列表的副本。

如果您尝试遍历原始列表并从中删除项目,您可能会遇到难以定位的错误。

额外资源

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