首页 > 解决方案 > 为什么嵌套循环一次有效

问题描述

我是编程新手,我遇到了嵌套循环的问题。我正在尝试将 sqlite 示例中的 id 与嵌套的 for 循环匹配,“将专辑与艺术家匹配”我知道可能有很多很酷的方法可以做到这一点,但我徘徊为什么我的方法不起作用。

import sqlite3
co=sqlite3.connect("chinook.db")
album=co.execute("select*from albums")
artist=co.execute("select*from artists")
albumQuery=0
artistQuery=0
for row in album:
    albumQuery+=1
    for x in artist:
        artistQuery+=1
        if(x[0]==row[2]):
            print(row[1]+" "+x[1])

print("Album Query:",albumQuery,"Artist Query",artistQuery)

输出:

对于那些即将摇滚的人,我们向你致敬 AC/DC 专辑查询:347 艺术家查询 275

这是我使用的数据库: SQLite 示例数据库

它只打印第一位艺术家的第一张专辑。我添加了整数来查看循环运行了多少次,这就是问题所在。有 347 张专辑,确实有 375 个,但有 275 个艺术家。当我添加一个变量来计算“艺术家中的 x”时,我看到它只循环了 275 次,但我猜它应该是 347*275。我做错了什么?

标签: pythonnested-loops

解决方案


co.execute返回一个生成器。在外循环的第一次迭代之后使用它的所有内容。在开始循环之前将生成器中的所有内容提取到列表中并遍历列表:

artist = list(co.execute("select*from artists"))

推荐阅读