![](/img/trans.png)
[英]What's the best way to split a string into fixed length chunks and work with them in Python?
[英]What's the best Python string split approach?
我正在重构一些 python 代码,并注意到原始创建者每次需要结果拆分列表中的元素时都在调用拆分方法,而不是将拆分结果存储为变量。
我想知道这两个选项之间是否有任何性能优势,或者一个比另一个更pythonic?
例如我会做什么
words = sentence.split(" ")
first_word = words[0]
second_word = words[1]
VS他们做了什么
first_word = sentence.split(" ")[0]
second_word = sentence.split(" ")[1]
如果要优化,请将拆分限制为 2 次,并且只保留前 2 项:
first_word, second_word = sentence.split(' ', maxsplit=2)[:2]
这样你只需要拆分一次,并且不需要将中间存储在 memory 中。
如果 then 句子很小:
first_word, second_word, _ = sentence.split(' ', maxsplit=2)
如果要进一步优化,则需要避免读取整个字符串。
为此,您需要获取前 2 个空格的索引并对字符串进行切片:
i = sentence.index(' ')
j = sentence.index(' ', i+1)
first_word, second_word = sentence[:i], sentence[i+1:j]
对 100k 单词句子( sentence = ' '.join(['abc']*100000)
)的测试显示与split
相比加速了 30 倍。 然而,这种方法在小字符串上效率不高(甚至效率更低)。
@mozway 的答案 + 评论很好地涵盖了性能方面,它可能应该是公认的答案。
您还想知道“更pythonic”的方式,所以我会在上面加上我的两分钱。
在我看来,最容易阅读的选项实际上是原始选项,因为它调用单词words
。 它甚至不需要读者理解sentence.split(" ")
到底在做什么:)
如果您还想要性能,下一个最佳选择是我提出的解决方案:
first_word, second_word, _ = sentence.split(' ', maxsplit=2)
它既漂亮(仅拆分一次,并且不会在 and 处拆分不必要的单词),而且非常清楚它的作用:获取前 2 个单词并丢弃 rest。 这也是一个单行:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.