我有两个虚拟列表代理,当向列表请求位置或位置范围时,它们动态地命中数据库。这意味着例如:
lazy_list[0]
将执行类似
的操作SELECT * FROM table WHERE ROWNUM=0
或lazy_list[1:10]
之类的内容:
SELECT * FROM table WHERE ROWNUM>0 AND ROWNUM<11
或len(lazy_list)
之类的内容:
SELECT count(*) FROM table
这意味着使用默认的python
自然合并列表的方式合并这些列表中的两个列表将会很昂贵,因为即使不需要也会对数据库进行合并。
如果我将两个具有相似行为的列表合并到一个iterable中,我可以使用itertools.chain
来懒散地遍历两个链接列表。
我想知道是否存在类似于在python中构建惰性列表的东西。例如,假设我们有两个惰性列表lazy_list1
和lazy_list2
,对于以下操作,合并的惰性列表将自动命中并自动计算结果,如下所示:
len(merged_list) = len(lazy_list1) + len(lazy_list2)
如果len(lazy_list1) = 4
和len(lazy_list2) = 5
,
merged_list[1:7] = lazy_list1[1:4] + lazy_list2[0:4]