
我见过很多人写Python,代码能跑就行。跑起来慢,等两秒,他们觉得正常。电脑卡一下,他们怪电脑旧。其实同样一件事,换个写法,时间差出几十倍。今天说三个地方,改掉之后你的代码会快很多。
第一个地方:循环里拼接字符串
新手最爱这么干。比如你要把一万个数字变成一行文本。
result = '' for i in range(10000): result += str(i) + ','
这段代码跑起来,电脑每一次加号都要重新建一个字符串。原来那个扔掉。一万次,就建一万个。内存里到处是垃圾。你换成列表,把每个小段塞进去,最后一次性接起来。
parts = [] for i in range(10000): parts.append(str(i) + ',') result = ''.join(parts)
改完以后,时间从零点几秒掉到零点零几秒。如果数字更多,比如一百万,原来要几十秒,现在一秒不到。
这个技巧不挑版本,Python 2和3都一样。平时写日志、拼SQL、生成CSV文件,全用得上。
第二个地方:判断元素在不在列表里
很多人直接写 if x in my_list。列表短的时候没事。列表长到几万条,每次查都要从头摸一遍。你写个循环跑一万次查询,电脑风扇就开始叫。
解决办法是用集合。集合内部像一本字典,查一个东西几乎不用时间,不管里面存了多少。
my_list = [ ... 十万个元素 ... ] my_set = set(my_list) if x in my_set: ...
把列表转成集合只花一次时间。之后每次查都飞快。注意一点:集合不保存顺序,也不能存重复值。如果你需要保持顺序,用字典的键。Python 3.7以后,字典记住插入顺序。查询速度和集合一样快。
my_dict = {item: None for item in my_list} if x in my_dict: ...
这个改法在数据清洗、去重、找交集的时候特别有用。原来嵌套循环写两行,跑十秒。换成集合,半秒完事。
第三个地方:用列表推导式代替循环加append
很多人习惯这样写。
squares = [] for i in range(100000): squares.append(i * i)
列表推导式写成一行。
squares = [i * i for i in range(100000)]
看着只是短了,实际运行的时候,Python给列表推导式开了小灶。它预先知道要建多大的列表。append那个循环,列表要不停扩容。扩容的时候要把旧数据搬新家。十万次追加,搬家好多次。列表推导式一次建好,中间不折腾。速度差出两三倍。
如果再加条件判断,效果更明显。
evens = [i for i in range(100000) if i % 2 == 0]
不要在推导式里放太复杂的逻辑。超过两行就拆回循环。推导式是工具,不是规矩。
三个技巧说完了。你找个自己的脚本试一下。把循环拼字符串改成join,把in list改成in set,把for append改成推导式。改完跑一遍,看时间少了多少。
以上就是“学会这3个Python技巧,代码效率提升10倍,新手也能轻松掌握!”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14520/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料