如何加速Python列表和字典让你的代码更加高效

开发 后端
今天,我们将讨论Python中的优化技术。在本文中,您将了解如何通过避免在列表和字典中进行重新计算来加快代码的速度。

 介绍

[[326871]]

今天,我们将讨论Python中的优化技术。在本文中,您将了解如何通过避免在列表和字典中进行重新计算来加快代码的速度。

 

加速Python列表和字典,让你代码更加高效

 

我们先编写一个装饰器函数来计算函数的执行时间,方便测验不同代码的速度:

 

  1. import functools 
  2. import time 
  3.  
  4. def timeit(func): 
  5.     @functools.wraps(func) 
  6.     def newfunc(*args, **kwargs): 
  7.         startTime = time.time() 
  8.         func(*args, **kwargs) 
  9.         elapsedTime = time.time() - startTime 
  10.         print('function - {}, took {} ms to complete'.format(func.__name__, int(elapsedTime * 1000))) 
  11.     return newfunc 

避免在列表中重新评估

在循环内

代码:

 

  1. @timeit 
  2. def append_inside_loop(limit): 
  3.     nums = [] 
  4.     for num in limit: 
  5.         nums.append(num) 
  6.  
  7. append_inside_loop(list(range(1, 9999999))) 

在上面的函数中.append每次通过循环重新计算的函数引用。执行后,上述函数所花费的总时间:

 

  1. o/p - function - append_inside_loop, took 529 ms to complete 

在循环外

代码:

 

  1. @timeit 
  2. def append_outside_loop(limit): 
  3.     nums = [] 
  4.     append = nums.append 
  5.     for num in limit: 
  6.         append(num) 
  7.  
  8. append_outside_loop(list(range(1, 9999999))) 

在上面的函数中,我们对nums.append在循环外部估值,并在循环内部使用append为变量。总时间:

 

  1. o/p - function - append_outside_loop, took 328 ms to complete 

如您所见,当我们在​for循环外部追加为一个本地变量,这将花费更少的时间,可以将代码加速201 ms。​

避免在字典中重新求值

在循环内部

代码:

 

  1. @timeit 
  2. def inside_evaluation(limit): 
  3.     data = {} 
  4.     for num in limit: 
  5.         data[num] = data.get(num, 0) + 1 
  6.  
  7. inside_evaluation(list(range(1, 9999999))) 

上述函数所花费的总时间:

 

  1. o/p - function - inside_evaluation, took 1400 ms to complete 

在循环外

代码:

 

  1. @timeit 
  2. def outside_evaluation(limit): 
  3.     data = {} 
  4.     get = data.get 
  5.     for num in limit: 
  6.         data[num] = get(num, 0) + 1 
  7.  
  8.  
  9. outside_evaluation(list(range(1, 9999999))) 

上述函数所花费的总时间:

 

  1. o/p - function - outside_evaluation, took 1189 ms to complete 

如你所见,我们这里的代码速度提高了211毫秒。

责任编辑:华轩 来源: 今日头条
相关推荐

2020-05-21 15:14:15

Python列表字典

2010-09-09 16:39:24

2010-05-20 18:27:10

IIS服务器

2017-12-07 10:09:55

数据中心资产审计

2023-11-23 15:28:38

2009-06-09 10:13:46

账号设置网络控制

2017-04-20 12:56:46

原型设计工具

2015-10-27 10:12:26

数据中心高效数据中心

2023-07-25 16:14:51

Python技巧

2020-09-02 14:00:05

Python代码脚本

2021-08-16 12:13:02

SwiftUIList ArticleList

2013-03-25 09:41:20

PythonCython

2020-08-21 09:52:03

数据中心IT技术

2021-07-01 10:03:55

Distroless容器安全

2022-09-19 15:02:24

C语言

2021-01-01 14:36:03

Python开发语言

2018-01-30 10:28:29

数据中心云计算公共云

2009-10-13 10:12:10

ScalaTestScala
点赞
收藏

51CTO技术栈公众号