在 Python 中搜索对象列表

imn*_*mns 2 python

我有一个具有日期属性的 Item 对象列表。我还有一个从数据库中获取的单个日期。

我想搜索列表,找到大于我从数据库返回的日期的所有列表项。

我的 Items 对象列表中有超过一千个对象,因此我希望尽可能高效。

我认为循环遍历列表中的每个项目并检查它是否大于我从数据库返回的日期并不是最有效的方法。

class Item(object):    
    def __init__(self, title, link, description, date):
        self.title = title
        self.link = link
        self.description = description
        self.date = date

item_list = [] 
...
#assume I populate the list with a 1,000 Item objects

filtered_list = []
for it in item_list:
    if date_from_db > it.date:
        filtered_list.append(it)
Run Code Online (Sandbox Code Playgroud)

Tim*_*ara 5

列表推导式是在数据库之外执行此操作的一种相当有效的方法:

[it for it in item_list if date_from_db > it.date]
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用filter内置的:

filter(lambda it: it if date_from_db > it.date, item_list)
Run Code Online (Sandbox Code Playgroud)

  • @Steven Rumbalski,没有办法避免这样做,除非你有一台在独角兽灰尘上运行的神奇计算机,或者可以在列表中做出比所提供的更强的假设。即使有一个聪明的数据结构,您也必须加载它,这将涉及 - 等待 - 循环遍历每个项目。诚然,这两个答案都可以指出这个事实,但他们也都找到了在一般情况下用纯 python 实现这一点的最佳方法。 (2认同)