gpt4 book ai didi

python - 列表理解方法优化

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:39 27 4
gpt4 key购买 nike

我开发了一些围绕两个自定义类的 Python 代码 - 一个“库”类 (Lib),其中包含基于“Cas”类的多个对象的 Python 列表。我没有在这里发布这些类的代码,但是要理解我的问题,您真正需要知道的是“Library”对象包含一个 Python 列表,“Cas”对象包含各种属性,其中一些属性是字符串和一些值。

代码的目标之一是操作 Library 类中的 Python 列表,并根据某些用户驱动的标准返回“Cas”对象的子集。例如,返回特定属性等于给定字符串或大于给定值的 Cas 对象。

为此,我编写了以下通用方法filterLibrarySingle,以允许我根据各种方法(filterMethod)、属性(filterField)和值(filterValue)过滤库类(self.Lib)中的Python列表。在该方法中,我使用列表理解来实现这一点。

在分析我的代码时,这个方法似乎是一个相当大的瓶颈!有谁知道如何加快速度吗?

def filterLibrarySingle(self, filterField, filterMethod, filterValue1, filterValue2=None):
if filterMethod == 'eq':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) == filterValue1]

elif filterMethod == 'lt':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) < filterValue1]

elif filterMethod == 'gt':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) > filterValue1]

elif filterMethod == 'le':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) <= filterValue1]

elif filterMethod == 'ge':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) >= filterValue1]

elif filterMethod == 'gelt':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) >= filterValue1 and getattr(cas, filterField) < filterValue2]

elif filterMethod == 'gele':
self.Lib = [cas for cas in self.Lib if getattr(cas, filterField) >= filterValue1 and getattr(cas, filterField) <= filterValue2]

我已经为此绞尽脑汁好几天了,试图加快速度,但我想我的 Python 知识还不够好!

我希望有人能够帮助提高此方法的性能。

非常感谢

标记

最佳答案

加速这种处理的通常方法是消除纯Python步骤,转而使用基于C的高速工具,包括functools.partial()itertools.imap ()itertools.ifilter()operator.__eq__()hasattr()

关于python - 列表理解方法优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com