首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的for循环意外输出

嵌套的for循环意外输出
EN

Stack Overflow用户
提问于 2017-07-12 02:32:38
回答 2查看 53关注 0票数 0

我一直在尝试创建一个嵌套的for循环,但由于某种原因,内部的循环只循环一次,并且我不知道为什么。我已经将我的代码减少到最低限度,只是为了弄清楚发生了什么:

代码语言:javascript
复制
pupil = db.session.query(Pupil).all()
result = db.session.query(Pupil_OLD).all()
for row in pupil:
    for sublist in result:   
        print("sublist"+str(sublist.PUPIL_ID))
    print("pupil"+str(row.PUPIL_ID))

这会产生以下结果:

代码语言:javascript
复制
pupil1
sublist1
sublist2
sublist3
pupil2
pupil3

而它应该生成

代码语言:javascript
复制
pupil1
sublist1
sublist2
sublist3
pupil2
sublist1
sublist2
sublist3
pupil3
sublist1
sublist2
sublist3

有人知道我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-12 02:34:49

我假设result是一个接近尾声的生成器。

您可以像这样重置它:

代码语言:javascript
复制
pupil = db.session.query(Pupil).all()
for row in pupil:
    result = db.session.query(Pupil_OLD).all()
    for sublist in result:   
        print("sublist"+str(sublist.PUPIL_ID))
    print("pupil"+str(row.PUPIL_ID))

将其转换为列表是另一种选择,但您可能会错过很酷的生成器;)

抛开我对生成器的喜爱不谈,如果重置生成器意味着重新查询数据库,那么使用列表可能会更好。

票数 3
EN

Stack Overflow用户

发布于 2017-07-12 02:36:29

你应该做像这样的事情

代码语言:javascript
复制
pupil = db.session.query(Pupil).all()
result = list(db.session.query(Pupil_OLD).all())

因此,db.session.query(Pupil_OLD).all()的结果看起来是一个生成器,它被转换成一个不会像生成器那样被消耗的列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45042159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档