当前位置: 首页 > 面试题库 >

str.replace(..)。replace(..)ad nauseam是Python中的标准习语吗?

白浩气
2023-03-14
问题内容

例如,假设我想要一个函数来转义用于HTML的字符串(如Django的转义过滤器):

    def escape(string):
        """
        Returns the given string with ampersands, quotes and angle 
        brackets encoded.
        """
        return string.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace("'", '&#39;').replace('"', '&quot;')

这可以工作,但是很快就会变得丑陋,并且算法性能似乎很差(在此示例中,字符串被重复遍历了5次)。最好是这样的:

    def escape(string):
        """
        Returns the given string with ampersands, quotes and angle 
        brackets encoded.
        """
        # Note that ampersands must be escaped first; the rest can be escaped in 
        # any order.
        return replace_multi(string.replace('&', '&amp;'),
                             {'<': '&lt;', '>': '&gt;', 
                              "'": '&#39;', '"': '&quot;'})

是否存在这样的功能,还是使用我之前编写的标准Python习惯用法?


问题答案:

您是否有一个运行速度太慢的应用程序,并且对其进行了概要分析,发现像该代码片段这样的行导致其运行缓慢?瓶颈发生在意外的地方。

当前代码段遍历字符串5次,每次都做一件事。您建议遍历一次,可能每次都要做五件事(或者至少每次都要做某事)。尚不清楚这是否会自动对我做得更好。当前使用的算法为O(n * m)(假设字符串的长度比规则中的填充长),其中n是字符串的长度,m是替换规则的数量。我认为,您可以将算法复杂度降低到O(n * log(m)),在特定情况下,我们将原来的东西都只是一个字符(但在多次调用的情况下,则不是)到replaceO)(n),但这无关紧要,因为 m为5,
n是无界的

如果m保持恒定,则两个解的复杂度实际上都为O(n)。对我来说尚不清楚,尝试将五张简单的通行证变成一张复杂的通行证将是一项有价值的任务,而我目前无法猜测其实际时间。如果有什么可以使它更好地扩展的,我会认为这是更有价值的任务。

只通过一次而不是连续通过所有操作,还需要回答有关如何处理冲突规则以及如何应用它们的问题。这些问题的解决方案是一连串的replace



 类似资料:
  • Python标准库是Python强大的动力所在,我们已经在前文中有所介绍。由于标准库所涉及的应用很广,所以需要学习一定的背景知识。 硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念。这些内容基础而重要。 Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了解基本的计算机各个组成部分的性能。 操作系统 在了解操作系统时

  • 问题内容: 为什么在 Python 中比大约快1.5倍? 问题答案: 假设Python 2.7版(因为我要掷硬币而不会被说),我们可以找到源代码string.translate并与string.replace在: 哦,我们不能,开始于: 我投票给您,是因为您开始进行概要分析,所以让我们继续进行下去: 替换: 对于翻译: 我们的函数调用次数是相同的,不是更多的函数调用意味着运行会变慢,但是通常是一个

  • 什么是标准?标准是对重复性事物和概念所做的统一规定,他以科学技术和实践经验的结合成果为基础,经有关方面协商一致,由主管机构批准,以特定形式发布作为共同遵守的准则和依据。 在这个标准概念大行其道的今天,如果大家在生活中稍微注意一下,其实可以很容易发现,我们生活在一个标准化的世界里,每个产品的外包装或者标签上都会注明相应的执行标准。标准贯穿着我们的衣食住行。。总而言之,标准无处不在。 当然标准具有行业

  • 最近看到 pyproject.toml 貌似是想用来替代 setup.py 和 requirements.txt 这个 pyproject.toml 是谁搞的?是 python 官方还是一个独立项目还是某个库的附属品?

  • 主要内容:1. 绝对网址,2. 上下文相关URL,3. 与服务器相关URL,4. 协议相关URL,5. 添加参数,6. 网址片段标识符,7. URL重写,8. URL其它属性,9. 在URL中使用表达式Thymeleaf标准方言(称为Standard和SpringStandard)提供了一种在Web应用程序中轻松创建URL的方法,以便它们包含任何所需的URL工件。 这是通过连接表达方式来完成的,这是一种类似于Thymeleaf标准的表现: 1. 绝对网址 绝对URL用于创建到其他服务器的链接。它

  • Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Golang标准库。对于程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供完美的解决方案。以示例驱动的方式讲解Golang的标准库。 标准库基于最新版本Go。注:目前 Go 标准库文档并没有标识某个 API 基于哪个版本的 Go,将来会加上这部分 issue。 讲解中涉及到特定操作系统时,针对的都是