为什么嵌套循环只工作一次
Why nested loop works for one time
我是编程新手,我对嵌套循环有疑问。我正在尝试将 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)
输出:
For Those About To Rock We Salute You AC/DC Album Query: 347 Artist
Query 275
这是我使用的数据库:
SQLite Sample Database
它只打印第一张艺术家的第一张专辑。我添加了整数以查看循环 运行 的次数,这就是问题所在。有 347 张专辑,确实有 375 张,但有 275 位艺术家。当我添加一个变量来计算“for x in artist”时,我看到它只循环了 275 次,但我猜它应该是 347*275。我做错了什么?
看起来 select*from albums
return 只有一项。
co.execute
returns 一台发电机。它的所有内容都在外循环的第一次迭代之后使用。将生成器中的所有内容提取到列表中 before 开始循环并遍历列表:
artist = list(co.execute("select*from artists"))
给你,正如@DYZ 所说:
import sqlite3
co=sqlite3.connect("chinook.db")
album = list(co.execute("select*from albums"))
artist = list(co.execute("select*from artists"))
albumQuery=0
artistQuery=0
for row in album:
albumQuery+=1
for x in artist:
artistQuery+=1
if (int(x[0]) == int(row[2])):
print(row[1]+" "+x[1])
# print("Album Query:",albumQuery,"Artist Query",artistQuery)
我是编程新手,我对嵌套循环有疑问。我正在尝试将 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)
输出:
For Those About To Rock We Salute You AC/DC Album Query: 347 Artist Query 275
这是我使用的数据库: SQLite Sample Database
它只打印第一张艺术家的第一张专辑。我添加了整数以查看循环 运行 的次数,这就是问题所在。有 347 张专辑,确实有 375 张,但有 275 位艺术家。当我添加一个变量来计算“for x in artist”时,我看到它只循环了 275 次,但我猜它应该是 347*275。我做错了什么?
看起来 select*from albums
return 只有一项。
co.execute
returns 一台发电机。它的所有内容都在外循环的第一次迭代之后使用。将生成器中的所有内容提取到列表中 before 开始循环并遍历列表:
artist = list(co.execute("select*from artists"))
给你,正如@DYZ 所说:
import sqlite3
co=sqlite3.connect("chinook.db")
album = list(co.execute("select*from albums"))
artist = list(co.execute("select*from artists"))
albumQuery=0
artistQuery=0
for row in album:
albumQuery+=1
for x in artist:
artistQuery+=1
if (int(x[0]) == int(row[2])):
print(row[1]+" "+x[1])
# print("Album Query:",albumQuery,"Artist Query",artistQuery)