python - 有没有办法提高for循环处理列表的速度?
问题描述
我想提高我的代码的性能。我尝试了一些以前有人建议的方法,但我的代码速度仍然很慢。我能做些什么而不是尝试我尝试过的方式?
我的代码在这里:
matched_word = []
for w in word_list:
for str_ in dictionary:
if str_ == w:
matched_word.append(str_)
这里有一些参考点:
- 首先,word_list的长度为160,000,dictionary的长度约为200,000。
- 其次,我不能使用一组 word_list,因为我想制作一个
matched_word
包含重复单词( 的元素)的列表(word_list
)。 - 第三,以下代码仍然运行缓慢。
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]
谢谢你的帮助。(也感谢所有之前提供建议的人。)
解决方案
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}')
就是这样!查看我的代码并尝试在您自己的代码中使用!也许它有帮助!
推荐阅读
- javascript - 围绕用户点击位置居中图像
- vb.net - 我怎样才能尽可能多地运行 Timer?[Vb.Net]
- reactjs - 可编辑表反应
- python-3.x - 收件人电子邮件在 django 中没有收到任何消息
- python - 减去数据框中的两列,在循环中创建第三列
- c++ - 将 IDXGIAdapter1 转换为 IDXGIAdapter4 时出现链接错误 [DirectX 和 WinRT/C++]
- python - 使用 beautifulsoup 在不同选项卡中打开产品页面以在亚马逊中输入搜索结果
- android - 更新 Android Studio 后,Ionic 5 应用程序不再构建
- python - 对来自 RabbitMQ 的 N 条消息进行重复数据删除,时间相同但冲突操作不同
- docker - Docker 访问构建上下文之外的路径以进行 COPY