如何提取python的generator的元素
答案:1 悬赏:20 手机版
解决时间 2021-01-25 22:53
- 提问者网友:温旧梦泪无声
- 2021-01-25 18:12
如何提取python的generator的元素
最佳答案
- 五星知识达人网友:野味小生
- 2021-01-25 18:53
python中的generator是生成器,可以每次返回一个结果,并且记住上次的位置,非常节约内存。但是不好的地方是一个生成器只能使用一次,一次之后就会销毁。
所以想取特定元素会消耗这个生成器。以下是示例代码。
def gen(n):
i=0
while i
yield i
i+=1
def getElementbByIndex(index,gen):#取生成器中的第几个元素,从0开始
r=None
for i in range(index):
try:
r=next(gen)
except :
return None
return r
def getElementsbByIndices(indices,gen):#取生成器中的几个元素,序号存在indices中
rr=[None for i in indices]#初始化一个结果数组,默认值全为None,结果存在对应的位置上
m=max(indices)#最大位置
for i in range(m+1):
try:
r=next(gen)
if i in indices:
i_index_in_indices=indices.index(i)
rr[i_index_in_indices]=r#将结果的对应位置变成生成器的内容,当位置出现重复时,此方法不适合
except StopIteration:
return rr
return rr
g1=gen(10)
print(getElementbByIndex(3,g1))
g2=gen(20)
print(getElementsbByIndices([1,2,5,12,7],g2))
所以想取特定元素会消耗这个生成器。以下是示例代码。
def gen(n):
i=0
while i
yield i
i+=1
def getElementbByIndex(index,gen):#取生成器中的第几个元素,从0开始
r=None
for i in range(index):
try:
r=next(gen)
except :
return None
return r
def getElementsbByIndices(indices,gen):#取生成器中的几个元素,序号存在indices中
rr=[None for i in indices]#初始化一个结果数组,默认值全为None,结果存在对应的位置上
m=max(indices)#最大位置
for i in range(m+1):
try:
r=next(gen)
if i in indices:
i_index_in_indices=indices.index(i)
rr[i_index_in_indices]=r#将结果的对应位置变成生成器的内容,当位置出现重复时,此方法不适合
except StopIteration:
return rr
return rr
g1=gen(10)
print(getElementbByIndex(3,g1))
g2=gen(20)
print(getElementsbByIndices([1,2,5,12,7],g2))
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯