无法遍历 python 中的列表
Can't iterate through a list in python
从 mysql 连接器收到数据后,当我尝试遍历列表时,python 一直告诉我数据是 int 类型:
execute() 和 fetchall() 语句:
def top_sellers(self):
q = '''select Item, sum(Quantity) from purchases group by Item;'''
self.cursor.execute(q)
s = self.cursor.fetchall()
print(s)
print(type(s))
for i in len(s):
print(i)
以上代码退出:
[('beep', Decimal('3')), ('item1', Decimal('39')), ('Mask', Decimal('53')), ('Mask1', Decimal('2'))]
<class 'list'>
Traceback (most recent call last):
File "/data/data/com.termux/files/home/projekt-red/index.py", line 326, in <module>
main(id, password)
File "/data/data/com.termux/files/home/projekt-red/index.py", line 324, in main
x.load_prompt(acc_type)
File "/data/data/com.termux/files/home/projekt-red/index.py", line 301, in load_prompt
self.stats()
File "/data/data/com.termux/files/home/projekt-red/index.py", line 243, in stats
self.top_sellers()
File "/data/data/com.termux/files/home/projekt-red/index.py", line 265, in top_sellers
for i in len(list(s)):
TypeError: 'int' object is not iterable
len(s)
是一个整数,不可迭代。
如果你想用 n = len(s)
迭代 n
次,你需要用 range(len(s))
替换 len(s)
像这样:
def top_sellers(self):
q = '''select Item, sum(Quantity) from purchases group by Item;'''
self.cursor.execute(q)
s = self.cursor.fetchall()
print(s)
print(type(s))
for i in range(len(s)):
print(i)
编辑:
这将打印所有索引。如果要打印存储在s
中的结果,那么只需删除len()
和range()
,只保留for i in s
。或者,保持如上并用 print(s[i])
.
替换打印语句
您可以使用空白变量进行迭代,而不是使用 len() 函数迭代数组。 Len() 用于整数,列表中有字符串。如果我是你我会做...
def top_sellers(self):
q = '''select Item, sum(Quantity) from purchases group by Item;'''
self.cursor.execute(q)
s = self.cursor.fetchall()
print(s)
print(type(s))
for row in self:
for elem in row:
print(elem)
并且会 return...
beep
3
item1
39
Mask
53
Mask1
2
如果你想打印“('beep', '3')”,只需去掉“for elem in row”并将打印语句移到另一个 for 语句中即可。
从 mysql 连接器收到数据后,当我尝试遍历列表时,python 一直告诉我数据是 int 类型:
execute() 和 fetchall() 语句:
def top_sellers(self):
q = '''select Item, sum(Quantity) from purchases group by Item;'''
self.cursor.execute(q)
s = self.cursor.fetchall()
print(s)
print(type(s))
for i in len(s):
print(i)
以上代码退出:
[('beep', Decimal('3')), ('item1', Decimal('39')), ('Mask', Decimal('53')), ('Mask1', Decimal('2'))]
<class 'list'>
Traceback (most recent call last):
File "/data/data/com.termux/files/home/projekt-red/index.py", line 326, in <module>
main(id, password)
File "/data/data/com.termux/files/home/projekt-red/index.py", line 324, in main
x.load_prompt(acc_type)
File "/data/data/com.termux/files/home/projekt-red/index.py", line 301, in load_prompt
self.stats()
File "/data/data/com.termux/files/home/projekt-red/index.py", line 243, in stats
self.top_sellers()
File "/data/data/com.termux/files/home/projekt-red/index.py", line 265, in top_sellers
for i in len(list(s)):
TypeError: 'int' object is not iterable
len(s)
是一个整数,不可迭代。
如果你想用 n = len(s)
迭代 n
次,你需要用 range(len(s))
替换 len(s)
像这样:
def top_sellers(self):
q = '''select Item, sum(Quantity) from purchases group by Item;'''
self.cursor.execute(q)
s = self.cursor.fetchall()
print(s)
print(type(s))
for i in range(len(s)):
print(i)
编辑:
这将打印所有索引。如果要打印存储在s
中的结果,那么只需删除len()
和range()
,只保留for i in s
。或者,保持如上并用 print(s[i])
.
您可以使用空白变量进行迭代,而不是使用 len() 函数迭代数组。 Len() 用于整数,列表中有字符串。如果我是你我会做...
def top_sellers(self):
q = '''select Item, sum(Quantity) from purchases group by Item;'''
self.cursor.execute(q)
s = self.cursor.fetchall()
print(s)
print(type(s))
for row in self:
for elem in row:
print(elem)
并且会 return...
beep
3
item1
39
Mask
53
Mask1
2
如果你想打印“('beep', '3')”,只需去掉“for elem in row”并将打印语句移到另一个 for 语句中即可。