在Python中懒洋洋地合并两个列表

时间:2014-01-17 09:14:50

标签: python list collections merge lazy-evaluation

我有两个虚拟列表代理,当向列表请求位置或位置范围时,它们动态地命中数据库。这意味着例如:

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_list1lazy_list2,对于以下操作,合并的惰性列表将自动命中并自动计算结果,如下所示:

  1. len(merged_list) = len(lazy_list1) + len(lazy_list2)

  2. 如果len(lazy_list1) = 4len(lazy_list2) = 5

    merged_list[1:7] = lazy_list1[1:4] + lazy_list2[0:4]

0 个答案:

没有答案