Python 如何为给定的iterable对象创建流生成器?

Python 如何为给定的iterable对象创建流生成器?,python,Python,编写一个函数,为给定的iterable对象(列表、生成器等)生成流生成器,该对象的元素包含位置和值,并按出现顺序排序。流生成器应等于初始流(无位置),但间隙用零填充。例如: gen=gen\u流(9,4111,7,12)] 列表(gen)[0,0,0,0,111,0,0,12,0]第一个元素的索引为零,因此111位于第五位,12位于第八位 也就是说,2个有效元素的索引为4和7,所有其他元素都用零填充 为了简化事情,在初始流中对元素进行排序(即位置较低的元素应位于数字较高的元素之前) 第一个参数可

编写一个函数,为给定的iterable对象(列表、生成器等)生成流生成器,该对象的元素包含位置和值,并按出现顺序排序。流生成器应等于初始流(无位置),但间隙用零填充。例如:

gen=gen\u流(9,4111,7,12)]

列表(gen)[0,0,0,0,111,0,0,12,0]
第一个元素的索引为零,因此111位于第五位,12位于第八位 也就是说,2个有效元素的索引为4和7,所有其他元素都用零填充

为了简化事情,在初始流中对元素进行排序(即位置较低的元素应位于数字较高的元素之前)

第一个参数可以是无,在这种情况下,流应该是有限的,例如无限零流:
gen\u流(无,[])

下面的流以0,0,0,0,111,0,0,12。。。然后无限生成零:

gen_-stream(无,[(4111)、(7,12)])

函数还应支持更高级情况下的自定义位置值提取器,例如

def day_extractor(x):
  months = [31,28,31,30,31,31,30,31,30,31,30,31]
  acc = sum(months[:x[1]-1]) + x[0] - 1
  return (acc, x[2])
    precipitation_days = [(3,1,4),(5,2,6)]
    list(gen_stream(59,precipitation_days,day_extractor)) #59: January and February to limit output
[0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
降水天数格式如下:(d,m,mm),其中d-月日,m-月,mm-降水量,mm 例如: (3,1,4)-1月3日降雨量:4毫米 (5,2,6)-2月5日降雨量:6毫米 提取器作为具有默认值的可选第三个参数传递-lambda函数,该函数处理(位置、值)对,如第一个示例中所示

我就是这么做的:

    import sys
    a=[(4,111),(7,12)]
    n = 9
    def gen_stream(n1, a1):
     if n1==None:
      b = [0 for i in range(sys.maxsize)]
     else:
      b = [0 for i in range(n1)]
     for i in range(len(a1)):
         b[a[i][0]]=a[i][1]
     for i in range(len(b)):
       yield b[i]
    for i in gen_stream(None, a):
        print(i)
到目前为止,我已经到达了一个具有无穷多个零的流,但是由于某种原因,函数没有被执行。。。接下来几个月怎么做?我的内存错误崩溃了,程序占用了大量的内存(()请帮助