Python 为什么遍历字符串比拆分字符串更昂贵?

Python 为什么遍历字符串比拆分字符串更昂贵?,python,python-3.x,performance,Python,Python 3.x,Performance,我正在编写一些代码,需要遍历输入的每个字符。我发现在我的(大的)输入文件上,下面的循环比下面的循环要贵好几倍 s = sys.stdin.read() for i in range(len(s)): pass for c in sys.stdin.read().split('\n'): pass 我对拆分如何比简单地遍历字符串更有效感到困惑。如果有人能提供见解,我将不胜感激。首先,因为对字符串进行迭代会在每次迭代中为每个字符创建一组新的字符串对象,所以split会创建较少数量

我正在编写一些代码,需要遍历输入的每个字符。我发现在我的(大的)输入文件上,下面的循环比下面的循环要贵好几倍

s = sys.stdin.read()
for i in range(len(s)):
    pass

for c in sys.stdin.read().split('\n'):
    pass

我对拆分如何比简单地遍历字符串更有效感到困惑。如果有人能提供见解,我将不胜感激。

首先,因为对字符串进行迭代会在每次迭代中为每个字符创建一组新的字符串对象,所以split会创建较少数量的新字符串(通常)。第一个按字符进行迭代,第二个按行进行迭代。第一个循环可能只是更频繁地迭代几个数量级。注意,
对于sys.stdin中的行:…
应该比sys.stdin.read().split('\n')对于userland Python循环的高度优化的C代码快。真是不一样。@好奇你说的“理智”是什么意思?基于python迭代器的for循环将比原始字符串缓冲区上任何较低级别的C循环都要慢得多。是的,这并不奇怪。优化的内置方法比在解释器级别为循环执行的任何操作都要快得多。