![]() |
1
117
有三种可能性:
作为主脚本运行这个命令可以确认这三个函数是等效的。用
注意我们需要
噢,天真的实现速度太快了,甚至都不好笑:比我尝试的速度快6倍
要记住的教训:测量总是一件好事(但必须是准确的);字符串方法如
编辑 :添加了@jacob的建议,稍作修改,以获得与其他建议相同的结果(保留一行的尾随空格),即:
测量给出:
不如
但是基于分裂的方法仍然是规则。
旁白:可能更适合
至少,它没有那么冗长。需要剥离尾随
或者是它的变种——但是我在这里停下来,因为这几乎是一个理论上的练习。
|
![]() |
2
44
我不知道你所说的“然后又是解析器”是什么意思。拆分完成后,没有进一步的 一串 ,仅遍历 列表 分裂的字符串。这可能是实现这一点的最快方法,只要字符串的大小不是绝对巨大的。python使用不可变字符串的事实意味着 必须 总是创建一个新的字符串,所以无论如何,这必须在某个点上完成。 如果字符串非常大,缺点在于内存使用:您将在内存中同时拥有原始字符串和拆分字符串列表,从而使所需内存翻倍。迭代器方法可以节省您的开销,根据需要构建一个字符串,尽管它仍然要支付“拆分”的代价。但是,如果字符串太大,则通常希望避免 未分裂的 字符串在内存中。最好只是从一个文件中读取字符串,它已经允许您以行的形式进行迭代。 但是,如果内存中已经有一个很大的字符串,一种方法是使用Stringio,它向字符串提供一个类似文件的接口,包括允许按行迭代(在内部使用.find查找下一个换行符)。然后你得到:
|
![]() |
3
3
如果我读
|
![]() |
4
3
基于regex的搜索有时比生成器方法更快:
|
![]() |
5
1
我想你可以自己滚:
我不确定这个实现有多有效,但它只会在字符串上迭代一次。 嗯,发电机。 编辑: 当然,您还需要添加任何类型的解析操作,但这非常简单。 |
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
![]() |
Pratik · 不使用Java DeepCopy迭代器 7 年前 |
![]() |
PanDe · 将两个列表合并为一个Dict、Tuple 7 年前 |
![]() |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 7 年前 |