gpt4 book ai didi

python - 如何最好地在 Python 中存储大量文本?

转载 作者:太空狗 更新时间:2023-10-30 01:34:19 24 4
gpt4 key购买 nike

我最近发现我的一个学生正在做一个独立的项目,他使用非常大的字符串 (2-4MB) 作为字典中的值。

我从来没有理由去处理这么大的文本 block ,这让我想知道创建这么大的字符串是否会产生性能问题。

有没有比简单地创建一个字符串更好的方法呢?我意识到这个问题在很大程度上取决于上下文,但我正在寻找可能涵盖多个可能用例的通用答案。

如果您要处理那么多文本,您会如何将其存储在您的代码中,您会采取与仅处理只有几个字符的普通字符串相比有什么不同的做法吗?

最佳答案

这在很大程度上取决于您对琴弦的处理方式。我不太确定 Python 如何存储字符串,但我在 XEmacs(类似于 GNU Emacs)和 Emacs Lisp 的底层实现方面做了很多工作,这是一种像 Python 一样的动态语言,我知道字符串是如何存储的在那里实现。字符串将存储为类似于数组的内存块。在 Python 中创建大型数组并不是什么大问题,所以我不认为以这种方式简单地存储字符串会导致性能问题。不过需要考虑一些事项:

  1. 您如何构建字符串?如果您通过简单地附加到更大的字符串来逐个构建,您的 O(N^2) 算法将非常慢。 Java 使用 StringBuilder 类来处理这个问题。我不确定 Python 中是否有完全等效的方法,但您可以简单地创建一个包含所有要连接在一起的部分的数组,然后在最后使用 ''.join(array) 进行连接。

  2. 您需要搜索字符串吗?这与创建字符串无关,但需要考虑。搜索的字符串大小通常为 O(n);有一些加速使其成为 O(n/m),其中 m 是您正在搜索的子字符串的大小,但仅此而已。这里主要考虑是存储一个大字符串还是一系列子字符串。如果您需要搜索所有的子字符串,这与搜索大字符串相比帮助不大,但您可能事先知道某些部分不需要搜索。

  3. 您需要访问子字符串吗?同样,这与创建字符串无关,这是需要考虑的事情。按位置访问子字符串只是索引到正确的内存位置的问题,但是如果您需要获取大的子字符串,它可能效率低下,并且您可以通过将字符串存储为子字符串数组来加快速度,然后创建一个新字符串作为另一个数组,并共享一些字符串。但是,以这种方式进行需要付出努力,除非确实有必要,否则不应这样做。

总而言之,我认为对于简单的情况,使用这样的大字符串很好,但您应该考虑要执行的操作种类以及它们的 O(...) 时间是多少。

关于python - 如何最好地在 Python 中存储大量文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com