从 Python 列表中删除标点符号
本教程将介绍字符串常量 string.punctuation
,并讨论在 Python 中从字符串列表中删除标点符号的一些方法。
string.punctuation
是 Python 中包含所有标点符号的预初始化字符串。要使用这个字符串,我们必须导入 string
模块。string.punctuation
常量显示在以下编码示例中。
import string
print(string.punctuation)
输出:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
我们导入了 string
模块并显示了 string.punctuation
常量的值。输出显示了所有可能的英语标点符号。
我们可以通过在 Python 中使用 string.punctuation
和 for
循环从字符串列表中删除所有标点符号。下面的代码示例演示了这种现象。
import string
words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
new_words = []
for word in words:
for letter in word:
if letter in string.punctuation:
word = word.replace(letter,"")
new_words.append(word)
print(new_words)
输出:
['hello', 'Hi', 'bye bye', 'good bye', '']
我们初始化了一个包含标点符号的字符串 words
列表。然后我们创建了一个嵌套循环,它遍历 words
列表的每个字符串中的每个字符。外层 for
循环遍历列表中的每个字符串,内层 for
循环遍历该字符串的每个 letter
。然后我们使用 if
语句检查该 letter
是否在 string.punctuation
常量内。如果字母出现在 string.punctuation
常量中,我们通过用空字符串替换它来删除它。从字符串中删除所有标点符号后,我们将该字符串附加到我们的 new_words
列表中。最后,我们打印了 new_words
列表。
此实现的唯一问题是它允许空字符串保留在最终列表中。根据我们的要求,我们还可以通过在循环中放置额外的检查来从原始列表中删除空字符串。以下代码片段也显示了如何从列表中删除空字符串。
import string
words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
new_words = []
for word in words:
if word == "":
words.remove(word)
else:
for letter in word:
if letter in string.punctuation:
word = word.replace(letter,"")
new_words.append(word)
print(new_words)
输出:
['hello', 'Hi', 'bye bye', 'good bye']
这一次,我们的代码还从原始字符串中删除了所有空字符串。
前一种方法的唯一问题是它需要太多代码来完成从字符串列表中删除标点符号的简单任务。列表推导式是一种对列表元素执行不同计算操作的方法。我们可以在列表推导式中使用 for
循环和 if
语句。使用列表推导式的主要优点是它们需要的代码更少,而且通常比简单的 for
循环更快。我们可以使用带有 string.punctuation
字符串常量的列表推导来从 Python 中的字符串列表中删除标点符号。下面的代码示例向我们展示了如何使用列表推导从列表中删除标点符号。
import string
words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [''.join(letter for letter in word if letter not in string.punctuation) for word in words]
print(words)
输出:
['hello', 'Hi', 'bye bye', 'good bye', '']
老实说,理解上面的代码有点困难,但它并不复杂。它只是使用嵌套列表推导。代码的内部部分检查单个单词中的每个字母是否出现在 string.punctuation
常量中,并且只返回那些不在 string.punctuation
中的字母。包含这部分代码的 str.join()
函数将所有返回的字母与一个空字符串连接起来,并为我们提供一个没有任何标点符号的完整单词。外部部分为我们的 words
列表中的每个单词运行这个内部列表推导。我们将外部列表推导返回的单词存储到 words
列表中。最后,我们显示 words
列表的所有元素。
使用列表推导式的另一个优点是我们节省了 RAM 上的空间,即在我们的代码中,我们更新了原始列表,而不是创建一个新列表来存储结果。我们还可以通过在外部列表推导式中放置一个额外的 if
语句来从原始列表中删除空字符串。
import string
words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [''.join(letter for letter in word if letter not in string.punctuation) for word in words if word]
print(words)
输出:
['hello', 'Hi', 'bye bye', 'good bye']
这一次,当单词中没有元素时,我们的外部列表推导不会运行内部列表推导。使用这种方法,我们不会在结果字符串列表中得到空字符串。
我们之前的实现很好,因为它需要更少的代码并且比使用传统循环更快,但它可以更好。虽然代码较少,但是代码有点复杂。从 Python 中的字符串列表中删除标点符号的最快和最有效的方法是 str.translate()
函数。与列表推导式相比,它需要的代码更少,而且速度要快得多。str.translate()
函数 根据翻译表映射字符串中的每个字符。在我们的例子中,它将把 string.punctuation
中的所有字母映射到一个空字符串。下面的代码示例向我们展示了如何使用 str.translate()
函数从列表中删除标点符号。
import string
words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [word.translate(string.punctuation) for word in words]
print(words)
输出:
["hell'o", 'Hi,', 'bye bye', 'good bye', '']
我们使用带有 string.punctuation
常量和列表推导式的 str.translate()
函数来从我们的 words
列表中删除标点符号。word.translate(string.punctuation)
将 string.punctuation
常量中的每个字母映射到一个空字符串,列表推导对 words
列表中的每个字符串运行此代码并返回结果。我们将所有返回的字符串分配给 words
列表并显示输出。
输出在结果中显示一个空字符串。为了进一步删除这个空字符串,我们必须在我们的列表推导中放置一个额外的条件。
import string
words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [word.translate(string.punctuation) for word in words if word]
print(words)
输出:
["hell'o", 'Hi,', 'bye bye', 'good bye']
我们从前一个结果中删除了空字符串,只增加了一个条件。
string.punctuation
是一个预定义的常量字符串,包含所有可能的标点符号。多种方法使用这个字符串常量从字符串列表中删除标点符号,但最容易编写、最快和最有效的实现是使用带有列表推导式的 str.translate()
函数。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。