输入是一个包含大量字符的字符串,我希望用一个特殊的分隔符将这个字符串拆分成一个字符串列表。在
但是我想,仅仅使用split
将生成新的字符串,而不是拆分原始的输入字符串本身,在这种情况下,它会消耗大量内存(可以保证原始字符串不再被使用)。在
那么有没有一个方便的方法来做这种破坏性的分裂呢?在
情况如下:
input_string = 'data1 data2 <...> dataN'
output_list = ['data1', 'data2', <...> 'dataN']
我希望输出列表中的data1
与输入字符串中的data1
(以及所有其他)共享相同的内存区域。在
顺便说一句,对于每个输入字符串,大小是10MB-20MB;但是由于有很多这样的字符串(大约100个),所以我想这里应该考虑内存消耗?在
在Python中,字符串是不可变的。这意味着任何更改字符串的操作都将创建一个新字符串。如果您担心内存(虽然这不是什么大问题,除非您处理的是巨大的字符串),您可以总是用新的、修改过的字符串覆盖旧字符串,替换它。在
不过,您描述的情况稍有不同,因为
split
的输入是一个字符串,而输出是一个字符串列表。他们是不同的类型。在本例中,我只需创建一个包含split
输出的新变量,然后将旧字符串(即split函数的输入)设置为None
,因为您可以保证它不会再次使用。在代码:
也许python的方法是使用迭代器?这样,新的子串一次只能在内存中出现一个。基于 Splitting a string into an iterator:
这样可以很好地工作而不会导致内存问题。在
唯一的选择是使用切片而不是
split
来访问子字符串。您可以使用str.find
来查找每个分隔符的位置。然而,这将是缓慢和微妙的。如果您可以使用split并将原始字符串从作用域中删除,那么这样做是值得的。在你说这个字符串是输入的,所以你可以考虑读更少的字符,这样你就可以处理更容易管理的块了。你真的需要所有的数据同时存储在内存中吗?在
相关问题 更多 >
编程相关推荐