Python高效编程总结(持续更新中)

平时在使用Python编程的过程中,发现很多小技巧,但是对执行时间、占用内存影响非常大,特此在这里总结一下,有新的就会更新,先把遇到的记录在这里。

1.列表list的in操作是经常用到的,也就是判断某个元素是否存在于某个list中,时间复杂度为O(n),n为list中元素的个数

而set的判断in操作时间复杂度为O(1),这样我们以后在判断某个元素是否存在于list,尤其当这个in操作需要执行多次时,将list转换为set判断,程序会快个O(m)级别,m表示in 的操作次数

比如我们对如下两个代码打印花费的时间结果如下:

wordList=list(range(10**6))
start = time.clock()
"xyz" in wordList
print("Time used:",time.clock() - start)
Time used: 0.014611221267841756
wordList=list(range(10**6))
"xyz" in set(wordList)
start = time.clock()
print("Time used:",time.clock() - start)
Time used: 6.46008993498981e-05

可见时间级别相差10^3级别

总结一下python中list、set和dict数据类型各个操作的时间复杂度:

list的get、set、append、GetLength操作的时间复杂度为O(1),其他一般为O(n),比如常见的insert、copy、delete、extend、min、max等为O(n)

set的in判断操作为O(n)

dict的in、get、set、delete为O(1),copy为O(n)

参考链接:

三种数据类型各种操作时间复杂度表格比较:

https://blog.csdn.net/acbattle/article/details/97012800

dict和list的in操作时间复杂度比较:

https://blog.csdn.net/wqtltm/article/details/83149070

2. yield生成迭代器代替list,防止占用内存过多

原因为迭代器会一个一个加载,但是list会一次性加载进来

参考链接:

https://www.runoob.com/w3cnote/python-yield-used-analysis.html

3. pandas里面使用stack将一列变成多列:

比如我的数据是这样的:

数据中fir_insec里面一个数字对应sec_insec里面的好几个数字,我想增加若干列,将这两列的数字变成一一对应的关系,使用如下操作:

graph_df_temp = (graph_df.set_index(['fir_insec'])['second_insec_str'] 
                       .str.split(' ', expand=True)
                       .stack()
                       .reset_index(level=1, drop=True)
                       .reset_index(name='second_insec_str'))

最终的结果如下:

参考链接:后面补上

未完待更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skj1995

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值