在for循环实例化中,str.split()是否会导致执行速度减慢



我喜欢把代码减少到最低限度,喜欢保持简洁,但偶尔我会陷入是否弊大于利的困境。下面是一个我经常遇到的情况的例子,我开始思考我是否在以速度为代价进行缩小。

str = "my name is john"
##Alternative 1
for el in str.split(" "):
print(el)
##Alternative 2
splittedStr = str.split(" ")
for el in splittedStr:
print(el)

什么更快?我认为这是第二个,因为我们没有在每次迭代后分割字符串(甚至不确定我们是否这样做(?

str.split(" ")在这两种情况下都做完全相同的事情。它创建了一个拆分字符串的匿名列表。在第二种情况下,将其分配给变量,然后获取变量的值,这是一个很小的开销。如果你因为其他原因不需要保留这个物体,那就是浪费时间。但与发生在同一循环中的其他对象引用相比,这是一个微不足道的时间量。备选方案2还将数据留在内存中,这是另一个小的性能问题。

IMHO,备选方案1比2更好的真正原因是,它没有留下稍后需要splittedStr的暗示。

朋友,如果你想减少代码中的时间,循环元组而不是列表,但将结果分配到变量中,然后使用变量并不是最好的方法,因为你只是保留了一个内存位置来存储值,但有时你可以这样做只是为了拥有一个干净的代码,比如如果你在一行中有多个操作,比如

min(str.split(mylist)[3:10])

在这种情况下,最好有一个名为min_value的变量,例如,只是为了让事情更干净。

回到性能问题,如果您循环遍历一个列表或类似的元组,您实际上可以注意到性能的差异

这是在元组中循环

for i in (1,2,3):
print(i)

&这是在列表中循环

for i in [1,2,3]:
print(i)  

你会发现使用tuple会更快!

相关内容

  • 没有找到相关文章

最新更新