其他分享
首页 > 其他分享> > 不要在 Python 中运行循环,而是使用它们!

不要在 Python 中运行循环,而是使用它们!

作者:互联网

在这篇博客中,我将带您了解一些比 Python 中的循环更快的替代方法。

让我们开始!

1.过滤

根据名称我们很容易猜到它的作用。它为我们过滤可迭代对象。我们将以函数的形式传递过滤条件,这个函数将用于过滤可迭代对象中的每个元素。

句法:

filter(function, iterable)

现在让我们比较python过滤器与 for 循环和 while 循环的性能。

在这里,我创建了一个包含 100000 个连续项目的列表,然后将计算偶数的阶乘。最后,我们将对这些阶乘值求和。

Note:I'm running all of these codes in google colab; depending on your system these results could vary

# 使用for循环

import math 
import time 
import resource 
import sys 

time_start = time.perf_counter() 

sys.set_int_max_str_digits( 0 ) 

def  factorial ( n ): 
   return math.factorial(n) 

test_list = list ( range ( 1 , 100000 )) 
result = [] 
for i in  range ( len (test_list)) : 
    if test_list[i] % 2 == 0 :
      result.append(test_list[i]) 
print ( sum (result)) 

time_elapsed = (time.perf_counter() - time_start) 
memMb=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/ 1024.0 / 1024.0 

print ( "%f 秒 % f MByte" % (time_elapsed,memMb)) 

# 输出
2499950000 
0.0415381.082287 MByte
# 使用 while 循环

import math 
import time 
import resource 
import sys 

time_start = time.perf_counter() 

sys.set_int_max_str_digits( 0 ) 

def  factorial ( n ): 
   return math.factorial(n) 

test_list = list ( range ( 1 , 100000 )) 
result = [] 
i= 0 
while i < len (test_list) : 
    if test_list[i] % 2 == 0 : 
      result.append(test_list[i])
    i = i + 1  
print ( sum (result)) 

time_elapsed = (time.perf_counter() - time_start) 
memMb=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/ 1024.0 / 1024.0 

print ( "%f secs %f MByte" %复制代码(time_elapsed,memMb)) 

# 输出
2499950000 
0.0474461.085056 MByte
# 使用过滤器

import math 
import time 
import resource 
import sys 

time_start = time.perf_counter() 

sys.set_int_max_str_digits( 0 ) 

def  factorial ( n ): 
   return math.factorial(n) 

test_list = list ( range ( 1 , 100000 )) 
result =过滤器( lambda x: x % 2 == 0 , test_list) 
print ( sum ((result)))

time_elapsed = (time.perf_counter() - time_start) 
memMb=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/ 1024.0 / 1024.0 

print ( "%f secs %f MByte" % (time_elapsed,memMb)) 

# 输出
2499950000 
0.0226661.087833兆字节

2.地图

如果您想将一个函数应用于可迭代对象(如列表、元组甚至pandas系列)的每个值,此函数非常有用。

语法

map(function, iterable)

现在,让我们看看如何在 python 中使用 map 而不是循环。

# 使用for循环
import math 
import time 
import resource 
import sys 

time_start = time.perf_counter() 

sys.set_int_max_str_digits( 0 ) 

def  factorial ( n ): 
   return math.factorial(n) 

test_list = list ( range ( 1 , 10000 )) 
result = 0 
for i in  range ( len (test_list)) : 
    test_list[i] = factorial(test_list[i]) 
print ( sum(test_list)) 

time_elapsed = (time.perf_counter() - time_start) 
memMb=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/ 1024.0 / 1024.0

打印( "%f secs %f MByte" % (time_elapsed,memMb)) 

#output 
284654436382457541 ..................... 0420940313 
12.2294300.167130兆字节
# 使用 while 循环

import math 
import time 
import resource 
import sys 

time_start = time.perf_counter() 

sys.set_int_max_str_digits( 0 ) 

def  factorial ( n ): 
   return math.factorial(n) 

test_list = list ( range ( 1 , 10000 ))
结果= 0
 i= 0 
while i < len (test_list) : 
    test_list[i] = factorial(test_list[i]) 
    i = i + 1  
print (总和(test_list)) 

time_elapsed = (time.perf_counter() - time_start) 
memMb=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/ 1024.0 / 1024.0 

print ( "%f secs %f MByte" % (time_elapsed,memMb)) 

#输出
284654436382457541 ..................... .0420940313 
11.2638741.013439兆字节

现在,如果我们使用 map 函数运行相同的代码

# 使用 Map 

import math 
import time 
import resource 
import sys 

time_start = time.perf_counter() 

sys.set_int_max_str_digits( 0 ) 

def  factorial ( n ): 
   return math.factorial(n) 

test_list = list ( range ( 1 , 10000 )) 
result =地图(阶乘,test_list)
打印总和((结果)))

time_elapsed =(time.perf_counter() - time_start)
memMb = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss /1024.0 / 1024.0 

#Output 
284654436382457541 ..................... .0420940313 
10.0697551.013439 MByte

3.减少

Python 提供了一个名为 reduce() 的函数,它允许您以更简洁的方式减少列表。此函数通过将函数和可迭代对象(如列表、元组、系列等)作为参数并返回单个值作为输出来执行函数计算。

标签:Python,爬虫,零基础必,实战教程,数据,链接,数字字母
来源: