如何快速将大量数据转换为字符串?

2024-09-29 17:14:52 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下课程:

import numpy as np

class ToStringify():
    DEMARCATION = "::::"
    def __init__(self):
        self.first_np_array = np.random.rand(30, 30, 30)
        self.second_np_array = np.random.rand(30, 30, 30)
        self.some_string = "string"
        self.some_int = 5

    def to_str_format(self) -> str:
        entries = [
            self.first_np_array, self.second_np_array, self.some_string, self.some_int
        ]
        return f"{self.DEMARCATION}".join([str(entry) for entry in entries])

我已经分析了我的代码,to_str_format占用了我总程序运行时间的25%。不幸的是,to_str_format需要输出一个字符串(无论我选择什么界限),该字符串将在一些我无法更改的管道中进一步使用。我正在做一个列表理解,试图加快事情,但除此之外,我不知道我还能做什么(如果有的话)。我正在使用python 3.9,如果这有什么变化的话


Tags: toselfformatstringdefnprandomsome
1条回答
网友
1楼 · 发布于 2024-09-29 17:14:52

您必须再次分析,以验证这些建议中的任何一个是否产生了足够大的影响,但快速的非正式测试显示可能有10-15%的改进,因此可能会有所帮助

首先,这是:

join([str(entry) for entry in entries])

不需要[{}join()可以使用生成器表达式,因此列表理解只会增加创建(可能较大)对象的开销。因此:

join(str(entry) for entry in entries)

可能会快一点(大约5%)。比这还要快(约10%)的是:

join(map(str, entries))

第二个是f字串。如果您根本不修改或更改DEMARCATION的表示形式,这就足够了:

self.DEMARCATION.join(....)

这避免了处理f字符串的开销。总之,这可能是最有效的形式:

return self.DEMARCATION.join(map(str, entries))

另外一件事是entries列表。如果多次调用to_str_format(),并且entries从未更改(即,它始终是这4个对象的列表),则最好在其他位置(例如实例或类属性)设置一次。将其创建为元组而不是列表可能会稍微快一点

相关问题 更多 >

    热门问题