首页 > 解决方案 > 有没有办法提高for循环处理列表的速度?

问题描述

我想提高我的代码的性能。我尝试了一些以前有人建议的方法,但我的代码速度仍然很慢。我能做些什么而不是尝试我尝试过的方式?

我的代码在这里:

matched_word = []
for w in word_list:
    for str_ in dictionary:
        if str_ == w:
            matched_word.append(str_)

这里有一些参考点:

import collections
matched_word = collections.deque
for w in dictionary:
    if w in word_list:
        matched_word.append(w)
matched_word = [w for w in word_list if w in dictionary]

谢谢你的帮助。(也感谢所有之前提供建议的人。)

标签: pythonlistperformancefor-loop

解决方案


Python 使用 GIL 来避免死锁,这就是为什么 python 只在单线程中工作的原因,这就是为什么在某些情况下它太慢的原因。我将给出一个您可以自己实现的代码示例。因此,我们将使用多处理而不是使用线程,也许差异不会有太大变化,但无论如何都要尝试!

示例代码:

from multiprocessing import Pool
import time


COUNTER = 50000000

def count(n):
    while n > 0:
        n -= 1

if __name__ == '__main__':
    pool = Pool(processes=2)  # Here you choose how many processes do you want!
    start = time.time()
    # First parametre: the function; second: the value!
    r1 = pool.apply_async(count, [COUNTER//2]) # It is 2 because I choose 2 processes, but can be more!
    r2 = pool.apply_async(count, [COUNTER//2])
    pool.close()
    pool.join()
    end = time.time()
    print(f'Seconds: {end - start}')

就是这样!查看我的代码并尝试在您自己的代码中使用!也许它有帮助!


推荐阅读