python - 为什么嵌套循环一次有效
问题描述
我是编程新手,我遇到了嵌套循环的问题。我正在尝试将 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。我做错了什么?
解决方案
co.execute
返回一个生成器。在外循环的第一次迭代之后使用它的所有内容。在开始循环之前将生成器中的所有内容提取到列表中并遍历列表:
artist = list(co.execute("select*from artists"))
推荐阅读
- javascript - 显示现有对象的属性时控制台显示未定义
- inno-setup - 在安装程序运行时更改安装程序语言 (Inno Setup)
- node.js - 将承诺值存储到变量中不解析 nodejs
- node.js - 无法获取 / 使用 node.js + socket.io 将客户端连接到服务器
- python - 向列表中的图像添加黑框
- python - 如何在 python 中将 3hours26minutes33seconds 之类的字符串转换为 HH:MM:SS 格式?
- sql - 在 Hive 中选择没有分组依据的条件条件下具有 Mix、Max 函数的所有列
- sql - SQL 上的动态列不起作用(APEX,交互式报告)
- php - 从 2 个 mysql 数据库中提取数据错误类型
- datepicker - 有没有办法将“转到今天”添加到 JavaFX DatePicker?