1
87
演示:
编辑:
我刚刚确认了在python3.2.1中这需要恒定的内存,假设我的测试方法是正确的。我创建了一个非常大的字符串(1GB左右),然后用
更通用的版本:
我们的想法是
演示:
(应当指出
str.split
有一个丑陋的行为:它有特殊情况
(如果您想自己实现它以获得更高的性能(尽管它们很重,regex最重要的是在C中运行),您应该编写一些代码(使用ctypes?不知道如何让发电机与它一起工作?),使用以下用于固定长度分隔符的伪代码:哈希长度为L的分隔符。在使用运行哈希算法扫描字符串时,保留长度为L的运行哈希,O(1)更新时间。每当散列可能等于您的分隔符时,手动检查过去的几个字符是否是分隔符;如果是,则从上次yield开始生成子字符串。字符串开头和结尾的特殊情况。这将是教科书算法的一个生成器版本,用于做O(N)文本搜索。多处理版本也是可能的。他们可能看起来杀伤力过大,但这个问题意味着一个人正在处理非常巨大的字符串。。。在这一点上,您可能会考虑一些疯狂的事情,比如缓存字节偏移量(如果它们很少的话),或者在磁盘上使用一些由testring view object支持的磁盘,购买更多的RAM等等。) |
2
18
我能想到的最有效的方法就是用
[编辑2016-8-2:更新此选项以可选地支持regex分隔符]
你想怎么用就怎么用。。。
虽然每次执行find()或切片时字符串中都会有一点开销,但这应该是最小的,因为字符串在内存中表示为连续数组。 |
3
10
这是的生成器版本
编辑: |
4
10
递归回答(
测试使用
这就提出了另一个问题,为什么
|
5
6
我只复制主文件的docstring
分开绳子
当只提供一个分隔符时,字符串将被它简单地拆分。
如果提供了多个分隔符,则字符串将按最长值拆分
如果没有提供分隔符,
这个函数在python3中工作,并且可以应用一个简单但相当难看的修复程序使它在2和3版本中都工作。函数的第一行应更改为:
|
6
3
编辑: 非常简单的、半途而废的实现:
|
7
3
如果你想写一个,那就相当容易了:
|
8
3
下面是我使用的测试(在Python3和Python2中):
does "the right thing" 对于unicode空白,但我还没有实际测试过。 也可作为 gist |
9
3
如果你也想 阅读 返回
用法
|
10
3
|
11
2
我想展示如何使用find iter解决方案为给定的分隔符返回一个生成器,然后使用itertools中的成对配方来构建上一个下一个迭代,该迭代将获得与原始split方法相同的实际单词。
|
12
1
最愚蠢的方法,没有regex/itertools:
|
13
1
|
14
0
|
15
0
下面是一个简单的回答
|
16
0
|
July · 如何定义数字间隔,然后四舍五入 1 年前 |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |