嵌套for循环意外输出

时间:2017-07-11 18:32:38

标签: python for-loop

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

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))

这会产生:

pupil1
sublist1
sublist2
sublist3
pupil2
pupil3

虽然它应该产生

pupil1
sublist1
sublist2
sublist3
pupil2
sublist1
sublist2
sublist3
pupil3
sublist1
sublist2
sublist3

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

2 个答案:

答案 0 :(得分:3)

我认为result是一个到达终点的生成器。

你可以这样重置:

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))

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

我对生成器的热爱除了,如果重置它意味着重新查询数据库,你可能会更好地使用列表。

答案 1 :(得分:1)

你应该做一些像

这样的事情
pupil = db.session.query(Pupil).all()
result = list(db.session.query(Pupil_OLD).all())

因此db.session.query(Pupil_OLD).all()似乎是一个生成器的结果被转换为一个不会像生成器一样被消耗的列表。