python - 在 Python 中创建自定义迭代器以在大型数据集中搜索子列表
问题描述
我正在学习/实验 Python 中的迭代器/生成器,以创建一个快速搜索函数,该函数可以同时从前到后和从后到前搜索大型数据集的子集。我创建了一个搜索类,我打算线程化它的实例,以便它们并行执行搜索。我试图了解生成器的有用性,并想知道这是否是它们实际上有用的情况。按照我的设置方式,数据集仍必须加载到内存中。有没有办法做到这一点,整个数据集不必存储在变量中。任何关于我对这个想法的方法的指导将不胜感激!
class Search:
def __init__(self, dataset):
self.data = dataset
self.index = 0
self.end = len(dataset) - 1
def __iter__(self):
while self.index <= self.end:
yield self.index
self.index += 1
def __reversed__(self):
i = self.end
while i >= self.index:
yield i
i -= 1
def search(self, subset, reverse=False):
switch = (iter(self), reversed(self))
for index in switch[reverse]:
if self.data[index] != subset[0]:
continue
else:
sub = slice(index, index + len(subset))
if self.data[sub] == subset:
result = index
break
else:
result = 'Not Found!'
return result
x = Search(large_data)
#thread_1:
x.search(sublist)
#thread_2:
x.search(sublist, reverse=True)
解决方案
据我了解您的问题,您需要在数据集加载功能中进行迭代。这取决于数据来自哪里。对于文件和数据库,您将在文档中找到简单的解决方案。如果您使用某些 Web API,则可以使用分页。
推荐阅读
- android - React Native:制作原生库
- javascript - Firebase云函数不返回值,返回数据始终为空
- javascript - 无法在 Liquid-html 元素中设置属性 size=""
- excel - 当它应该从中提取的列中有数据时,我的 VLookup 怎么会返回 0
- javascript - 单击后松开焦点并专注于 TAB 键
- php - 是否可以使用 symfony 表单从请求创建多个实体?
- reactjs - 如何将 className 添加到 EasyUI 反应组件
- spring-boot - Prometheus 指标与微米指标(春季 2)
- python - Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西
- javascript - 如何使用 JavaScript 将名称属性分配给动态选择选项